Spring Boot 中自定义数据校验注解

这篇具有很好参考价值的文章主要介绍了Spring Boot 中自定义数据校验注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Boot 中自定义数据校验注解

在 Spring Boot 中,我们可以使用 JSR-303 数据校验规范来校验表单数据的合法性。JSR-303 提供了一些常用的数据校验注解,例如 @NotNull@NotBlank@Size 等。但是,在实际开发中,我们可能需要自定义数据校验注解来满足特定的需求。本文将介绍如何在 Spring Boot 中自定义数据校验注解,并提供示例代码来演示它的用法。

Spring Boot 中自定义数据校验注解

自定义校验注解

在 Spring Boot 中,我们可以通过定义注解并使用 @Constraint 注解来自定义数据校验注解。下面是一个自定义的注解 @ZipCode,用于校验邮政编码是否合法:

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ZipCodeValidator.class)
public @interface ZipCode {

    String message() default "Invalid zip code";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    @Target({ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface List {
        ZipCode[] value();
    }
}

在上面的代码中,我们使用了 @Constraint 注解来指示该注解需要使用 ZipCodeValidator 类进行校验。@Constraint 注解中的参数含义如下:

  • validatedBy:指示使用哪个类进行校验。
  • message:校验失败时返回的消息。
  • groups:校验分组。
  • payload:校验负载。

在注解中,我们定义了一个 ZipCodeValidator.List 内部注解,用于支持多个 @ZipCode 注解的使用。

自定义校验器

在自定义校验注解后,我们还需要实现校验器。下面是一个 ZipCodeValidator 校验器的示例代码:

public class ZipCodeValidator implements ConstraintValidator<ZipCode, String> {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value == null) {
            return true;
        }
        Pattern pattern = Pattern.compile("\\d{5}");
        Matcher matcher = pattern.matcher(value);
        return matcher.matches();
    }
}

在上面的代码中,我们实现了 ConstraintValidator<ZipCode, String> 接口,并重写了 isValid 方法。isValid 方法用于实际校验逻辑。在本例中,我们使用正则表达式验证邮政编码是否符合 5 位数字的格式。

使用自定义校验注解

在定义自定义校验注解和校验器后,我们可以在 Java 对象中使用自定义校验注解。下面是一个示例代码:

public class Address {

    @ZipCode
    private String zipCode;

    // 省略 getter 和 setter 方法
}

在上面的代码中,我们在 Address 类的 zipCode 属性上使用了 @ZipCode 注解。在使用时,我们不需要指定 message 参数,因为该参数已经在 @ZipCode 注解中指定。

在控制器中,我们可以使用 @Valid 注解来指示需要校验的对象。例如:

@RestController
@RequestMapping("/addresses")
public class AddressController {

    @PostMapping
    public ResponseEntity<?> createAddress(@Valid @RequestBody Address address) {
        // 创建地址
        return ResponseEntity.ok().build();
    }
}

在上面的示例代码中,我们使用了 @Valid 注解来指示需要校验 RequestBody 中的 Address 对象。如果校验失败,Spring Boot 将自动返回一个包含错误信息的响应。

总结

在本文中,我们介绍了在 Spring Boot 中自定义数据校验注解的方法,并提供了示例代码来演示它的用法。使用自定义校验注解可以帮助我们满足特定的数据校验需求,从而提高 Web 应用的安全性和可靠性。如果您在开发 Web 应用程序时需要进行数据校验,并且默认的数据校验注解无法满足您的需求,请务必考虑使用自定义校验注解的方法。文章来源地址https://www.toymoban.com/news/detail-495538.html

到了这里,关于Spring Boot 中自定义数据校验注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中自定义注解

    当使用Java编写应用程序时,我们常常使用注解来为程序添加附加信息,并且可以在运行时读取这些注解。除了Java提供的预定义注解外,我们还可以自定义注解来满足自己的需求。在本文中,我们将介绍Java中自定义注解的基础知识。 一、什么是注解? 注解是一种元数据,可

    2024年02月14日
    浏览(36)
  • Spring boot自定义注解

    定义一个注解类 使用AOP对注解进行解析,需要定义一个切面类,包括自定义的切点方法normalPointCut(),以及连接点的处理方法normalPointAround()。连接点中的ProceedingJoinPoint可以获取被代理类的方法属性等。 2.1 定义注解 2.2 实现参数解释器 记得实现WebMvcConfigurer 接口配置LimitReque

    2023年04月27日
    浏览(41)
  • spring boot实现实体类参数自定义校验

    安装依赖项 1、新建实体类 2、新建验证类 3、在控制器中 3.1 首先写入方法 @InitBinder注解的作用是在控制器方法执行之前,先执行有 @InitBinder注解的方法,使用WebDataBinder 把新建的验证规则绑定 3.2 在控制器接口参数中

    2024年02月12日
    浏览(38)
  • Spring Boot 自定义注解,AOP 切面统一打印出入参请求日志

    今天主要说说如何通过自定义注解的方式,在 Spring Boot 中来实现 AOP 切面统一打印出入参日志。小伙伴们可以收藏一波。 废话不多说,进入正题! 在看看实现方法之前,我们先看下切面日志输出效果咋样: 从上图中可以看到,每个对于每个请求,开始与结束一目了然,并且

    2024年02月08日
    浏览(49)
  • Spring Boot入门(23):记录接口日志再也不难!用AOP和自定义注解给Spring Boot加上日志拦截器!

            在上两期中,我们着重介绍了如何集成使用 Logback 与 log4j2 日志框架的使用,今天我们讲解的主题依旧跟日志有关,不过不是使用何种开源框架,而是自己动手造。         Spring的核心之一AOP;AOP翻译过来叫面向切面编程, 核心就是这个切面. 切面表示从业务逻辑中

    2024年02月11日
    浏览(56)
  • Spring Boot 3自定义注解+拦截器+Redis实现高并发接口限流

    在当今互联网应用开发中,高并发访问是一个常见的挑战。为了保障系统的稳定性和可靠性,我们需要对接口进行限流,防止因过多的请求导致系统崩溃。 本文将介绍如何利用Spring Boot 3中的自定义注解、拦截器和Redis实现高并发接口限流,帮助程序员解决这一挑战。 1. 自定

    2024年04月28日
    浏览(49)
  • Spring Boot学习随笔- 实现AOP(JoinPoint、ProceedingJoinPoint、自定义注解类实现切面)

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 问题 现有业务层开发存在问题 额外功能代码存在大量冗余 每个方法都需要书写一遍额外功能代码不利于项目维护 Spring中的AOP AOP:Aspect 切面 + Oriented 面向 Programmaing 面向切面编程 Aspect(切面) = Advice(通知) + Pointcut(

    2024年02月04日
    浏览(48)
  • spring数据深度校验/自定义校验

    @Validated和@Valid配合可以进行对象的深层次校验。 @Valid 作用在方法,字段,构造器和参数上 @Validated 作用在类 方法 和参数上 当我们的接口参数中包含深层次的对象时 如: BaseInfo时公共对象,字段含有校验的逻辑  Person为接口接收对象,属性中包含BaseInfo。 对于接口输入参数

    2024年02月08日
    浏览(31)
  • Spring Boot项目中不使用@RequestMapping相关注解,如何动态发布自定义URL路径

    在Spring Boot项目开发过程中,对于接口API发布URL访问路径,一般都是在类上标识 @RestController 或者 @Controller 注解,然后在方法上标识 @RequestMapping 相关注解,比如: @PostMapping 、 @GetMapping 注解,通过设置注解属性,发布URL。在某些场景下,我觉得这样发布URL太麻烦了,不适用,

    2024年03月22日
    浏览(66)
  • Spring Boot入门(23):基于AOP实现自定义注解拦截接口日志并保存入库 | 超级详细,建议收藏

            在上两期中,我们着重介绍了如何集成使用 Logback 与 log4j2 日志框架的使用,今天我们讲解的主题依旧跟日志有关,不过不是使用何种开源框架,而是自己动手造。         Spring的核心之一AOP;AOP翻译过来叫面向切面编程, 核心就是这个切面. 切面表示从业务逻辑中

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包