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

目录
相关文章
|
16天前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
103 26
|
19天前
|
缓存 Java 数据库
SpringBoot缓存注解使用
Spring Boot 提供了一套方便的缓存注解,用于简化缓存管理。通过 `@Cacheable`、`@CachePut`、`@CacheEvict` 和 `@Caching` 等注解,开发者可以轻松地实现方法级别的缓存操作,从而提升应用的性能和响应速度。合理使用这些注解可以大大减少数据库的访问频率,优化系统性能。
167 89
|
2月前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
181 73
|
6天前
|
监控 Java Spring
SpringBoot:SpringBoot通过注解监测Controller接口
本文详细介绍了如何通过Spring Boot注解监测Controller接口,包括自定义注解、AOP切面的创建和使用以及具体的示例代码。通过这种方式,可以方便地在Controller方法执行前后添加日志记录、性能监控和异常处理逻辑,而无需修改方法本身的代码。这种方法不仅提高了代码的可维护性,还增强了系统的监控能力。希望本文能帮助您更好地理解和应用Spring Boot中的注解监测技术。
33 16
|
2月前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
60 21
|
2月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
2月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
2月前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
2月前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
2月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
153 14