Constraint注解
在spring boot进行开发的时候,有时需要对请求的参数进行校验, 而@Constraint
可以实现自定义的校验注解。
Spring boot自定义参数校验注解
-
如果Spring boot是2.3.0之后的版本,需要引入新的依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
-
编写自定义注解处理文件
/** * 自定义注解处理类必须实现ConstraintValidator接口, 其中StringValidator是自己定义的注解, 而String是注解标注参数的类型 */ public class MyValidator implements ConstraintValidator<StringValidator, String> { private Integer value; // 获取自定义中value属性的值 @Override public void initialize(StringValidator constraintAnnotation) { this.value = constraintAnnotation.value(); } // 自定义注解处理程序, 返回true则通过自定义注解的校验, 返回false则是没有通过自定义注解的校验,并返回自定义注解中message的内容 @Override public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { System.out.println("isValid:" + s); // 如果校验的参数属性不为空,并且字符串的字符大于自定义注解中标注的值,则通过注解校验 if (s != null && !s.equals("") && s.length() > this.value) { return true; } return false; } }
-
自定义注解
/** * String类型验证 */ @Retention(RetentionPolicy.RUNTIME) @Documented @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) @Constraint(validatedBy = MyValidator.class) public @interface StringValidator { int value(); // 如果没有通过注解校验, 则打印message String message() default "字符串错误"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
-
编写controller类
@RestController public class TestController { // 在要校验的属性之前必须加上@Valid注解 @PostMapping(value = "/") public Object testConstraintValidator(@Valid User user) { return "这是一个测试"; } }
-
编写User类
public class User { // 此处使用了自定义注解, 要求name的长度必须超过4个字符 @StringValidator(value = 4) private String name; private Integer age; // ...此处实体类的构造方法和Getter,Setter方法省略 }