spring-boot-validator参数校验系列(3)--------自定义校验注解

简介: 根据自己的业务规则实现自定义校验注解

前言

目录

spring-boot-validator参数校验系列(1)--------基本参数校验

spring-boot-validator参数校验系列(2)--------分组校验

spring-boot-validator参数校验系列(3)--------自定义校验注解

spring-boot-validator参数校验系列(4)--------自定义参数校验异常


一、为什么要自定义注解?

   因为常见的注解满足不了我们的业务需求,比如,我们限制某个属性只能是固定的值!

二、如何实现

(1)首先完成基本校验spring-boot-validator参数校验系列(1)--------基本参数校验

(2)创建自定义注解

importjavax.validation.Constraint;
importjavax.validation.Payload;
importjava.lang.annotation.*;
/*** @Description : 自定义校验注解*/@Documented@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.PARAMETER})
//FixedValidatorClass 为执行判断逻辑实现类!@Constraint(validatedBy=FixedValidatorClass.class)
public@interfaceFixed {
String[] value() default {};
Stringmessage() default"请输入合法值!";
Class<?>[] groups() default {};
Class<?extendsPayload>[] payload() default {};
}

(3)创建注解判断逻辑类

importjavax.validation.ConstraintValidator;
importjavax.validation.ConstraintValidatorContext;
importjava.util.Arrays;
importjava.util.Objects;
/*** 状态标记校验器*/publicclassFixedValidatorClassimplements//Fixed为我们自定的注解,查看ConstraintValidator可知,第一个泛型参数必须继承Annotation,也就是必须是个注解第二个参数为此注解支持的校验类型,可以理解为@Fixed注解中的value返回类型ConstraintValidator<Fixed,Object> {
privateString[] values;
//初始化参数@Overridepublicvoidinitialize(Fixedfixed) {
//根据用户填写的value值,来初始化此属性只支持的值!this.values=fixed.value();
    }
@OverridepublicbooleanisValid(Objectvalue, ConstraintValidatorContextcontext) {
//具体的判断逻辑//是否为null,以及初始化值中是否包传入的值.//false表示校验失败,参数不合法!returnObjects.isNull(value) 
||Arrays.asList(values).contains(String.valueOf(value));
    }
}

(3)属性上增加自定义注解

我们的"老用户"了

@DatapublicclassMyPerson {
@NotBlank(message="id不可为空!",groups= {Update.class})
privateStringid;
@Size(max=8,min=1, message="用户名超出长度范围!")
privateStringname;
//这里以性别为例,只能输入0(女),1(男)@Fixed(value= {"0","1"},groups= {Insert.class,Update.class},message="请输入合法值!")
@NotNullprivateIntegersex;
}

Controller代码,注意@Validated 位置,看过校验系列文章第一篇的老读者,应该知道这个注解可以写在类上面的,但是经测试,卸载类上,不生效,具体原因尚不清楚,使用时注意下!

@RequestMapping("/custom")
publicvoidcustom(@RequestBody@ValidatedMyPersonmyPerson){
log.info("校验通过,用户信息为: {}",myPerson);
    }


PostMan访问

image.png

后台输出

image.png

目录
打赏
0
0
0
0
2
分享
相关文章
说一说 SpringBoot 整合 Junit5 常用注解
我是小假 期待与你的下一次相遇 ~
Spring MVC常用的注解
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中 的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 @Controller:控制器的注解,表示是表现层,不能用用别的注解代替 @RestController : 组合注解 @Conntroller + @ResponseBody @GetMapping , @PostMapping , @Put
Spring Boot的核心注解是哪个?他由哪几个注解组成的?
Spring Boot的核心注解是@SpringBootApplication , 他由几个注解组成 : ● @SpringBootConfiguration: 组合了- @Configuration注解,实现配置文件的功能; ● @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项 ● @ComponentScan:Spring组件扫描
SpringBoot+@Async注解一起用,速度提升
本文介绍了异步调用在高并发Web应用性能优化中的重要性,对比了同步与异步调用的区别。同步调用按顺序执行,每一步需等待上一步完成;而异步调用无需等待,可提升效率。通过Spring Boot示例,使用@Async注解实现异步任务,并借助Future对象处理异步回调,有效减少程序运行时间。
125 3
保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!
这是一份详尽的 Spring AI 注解式开发教程,涵盖从环境配置到高级功能的全流程。Spring AI 是 Spring 框架中的一个模块,支持 NLP、CV 等 AI 任务。通过注解(如自定义 `@AiPrompt`)与 AOP 切面技术,简化了 AI 服务集成,实现业务逻辑与 AI 基础设施解耦。教程包含创建项目、配置文件、流式响应处理、缓存优化及多任务并行执行等内容,助你快速构建高效、可维护的 AI 应用。
|
5月前
|
SpringBoot:SpringBoot通过注解监测Controller接口
本文详细介绍了如何通过Spring Boot注解监测Controller接口,包括自定义注解、AOP切面的创建和使用以及具体的示例代码。通过这种方式,可以方便地在Controller方法执行前后添加日志记录、性能监控和异常处理逻辑,而无需修改方法本身的代码。这种方法不仅提高了代码的可维护性,还增强了系统的监控能力。希望本文能帮助您更好地理解和应用Spring Boot中的注解监测技术。
139 16
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
102 0
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常
本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。
93 0
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问