Spring Boot 自定义注解进行参数校验

102 阅读1分钟

自定义注解

通过实现ConstraintValidator可以自定义参数注解。

StatusRangeValue.java


@Target( {
             METHOD,
             FIELD,
             ANNOTATION_TYPE,
             CONSTRUCTOR,
             PARAMETER
         })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {StatusRangeValueValidator.class})
public @interface StatusRangeValue {

    String range() default "";

    String message() default "格式不对,默认只能为指定的值";

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

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

StatusRangeValueValidator.java


public class StatusRangeValueValidator implements ConstraintValidator<StatusRangeValue,Integer> {

     private List<Integer> ranges;


    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext)     {
        return   ranges.contains(value);
    }

    @Override
    public void initialize(Mobile constraintAnnotation) {

         String range = constraintAnnotation.range();
        List<String> collect = Arrays.stream(range.split(",")).collect(Collectors.toList());
        ranges = collect.stream().map(Integer::parseInt).collect(Collectors.toList());

}

User.java


@Data
public class User {
    @NotBlank
    private String userName;

    @StatusRangeValue
    private String mobile;
}