平时项目中使用的@NotNull,@Pattern等校验注解进行校验,自己也可以针对要实现的逻辑进行自定义注解。
1.可以参照着@NotNull注解设计一个注解类
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) @Constraint(validatedBy = MyConstraintValidator.class) public @interface MyConstraint { String message() default "just test"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; }
2.上面的MyConstraintValidator是具体的逻辑实现类
public class MyConstraintValidator implements ConstraintValidator<MyConstraint,String> { @Override public void initialize(MyConstraint myConstraint) { System.out.println("--------------校验初始化----------------"); } @Override public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { System.out.println("---------------进入校验-----------------"); return !((String) value).matches("fuck"); } }
3.使用方法和其他注解一样
@Data @Builder @NoArgsConstructor @AllArgsConstructor public class User { @MyConstraint private String username; @NotNull private Integer age; private String password;}
@GetMapping("/test") public String query(@Valid User u) { return "ok"; }
程序执行结果: