Springboot校验注解

Spring Boot 提供了一组基于 Hibernate Validator 的校验注解,用于验证请求参数、实体对象等数据的合法性。下面是一些常用的 Spring Boot 校验注解及其功能:

导入依赖

        
            org.springframework.boot
            spring-boot-starter-validation
        

@Null 限制只能为null

@NotNull 适用于任何类型被注解的元素必须不能与NULL

@NotEmpty 适用于String Map或者数组不能为Null且长度必须大于0

@NotBlank 只能用于String上面 不能为null,调用trim()后,长度必须大于0

@AssertFalse 限制必须为false

@AssertTrue 限制必须为true

@DecimalMax(value) 限制必须为一个不大于指定值的数字

@DecimalMin(value) 限制必须为一个不小于指定值的数字

@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

@Future 限制必须是一个将来的日期

@Past 验证注解的元素值(日期类型)比当前时间早

@Max(value) 限制必须为一个不大于指定值的数字

@Min(value) 限制必须为一个不小于指定值的数字

@Pattern(value) 限制必须符合指定的正则表达式

@Size(max,min) 限制字符长度必须在min到max之间

@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 

针对于校验注解统一异常处理:

@RestControllerAdvice
public class MethodArgumentNotValidExceptionHandle {
    //统一异常处理
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public RespResult result(MethodArgumentNotValidException exception){
        BindingResult bindingResult = exception.getBindingResult();
        Map map=new HashMap<>();
        bindingResult.getFieldErrors().forEach(i->{
            map.put(i.getField(),i.getDefaultMessage());
        });
        return RespResult.ok(map);

    }
}

在 Spring Boot 中,可以通过自定义注解和对应的校验器来实现自定义校验注解。下面是实现自定义校验注解的步骤:设计一个@Contains限制字符串必须包含某个前缀字符串。

实体类如下:

@TableName(value ="brand")
@Data
public class Brand implements Serializable {
    @TableId(type= IdType.AUTO)
    private Integer id;
    @NotBlank
    private String name;
    @URL
    private String image;
    @Contains(str = "brand")
    private String initial;

    @Min(value = 0)
    @Max(value = 10)
    private Integer sort;

    private static final long serialVersionUID = 1L;
}

@Contains注解

@Documented
@Constraint(
        validatedBy = {ContainsForString.class}
)
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Contains {
    String message() default "没有包含指定前缀的字符串";

    Class[] groups() default {};

    Class[] payload() default {};

    String str() default "";
}

public class ContainsForString implements ConstraintValidator {

    private String str;
    @Override
    public void initialize(Contains constraintAnnotation) {
        str= constraintAnnotation.str();
    }

    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        //s是字符串属性值
        return s.startsWith(str);
    }
}

Apipost测试:

Springboot校验注解_第1张图片

你可能感兴趣的:(Springboot,spring,boot,java,数据库)