1 属性值校验注解

使用Spring Boot框架时,可以在实体类的属性定义上增加注解,实现属性值校验,常用的校验注解如下:

注解

描述

@Null

被注释的元素必须为null

@NotNull

被注释的元素不能为null

@NotBlank

被注释的元素不能为空字符串或null

@AssertTrue

被注释的元素必须为true

@AssertFalse

被注释的元素必须为false

@Min(value)

被注释的元素必须是一个数字,其值必须大于等于指定的最小值。

@Max(value)

被注释的元素必须是一个数字,其值必须小于等于指定的最大值。

@DecimalMin(value)

被注释的元素必须是一个数字,其值必须大于等于指定的最小值。

@DecimalMax(value)

被注释的元素必须是一个数字,其值必须小于等于指定的最大值。

@Size(max,min)

被注释的元素的大小必须在指定的范围内。

@Digits(integer,fraction)

被注释的元素必须是一个数字,其值必须在可接受的范围内。

@Past

被注释的元素必须是一个过去的日期。

@Future

被注释的元素必须是一个将来的日期。

@Pattern(value)

被注释的元素必须符合指定的正则表达式。

@Email

被注释的元素必须是电子邮件地址。

@Length

被注释的字符串的大小必须在指定的范围内。

@NotEmpty

被注释的字符串必须非空。

@Range

被注释的元素必须在合适的范围内。

2 值校验注解应用

示例代码如下:

public class PersonEntity {

    /**
     * 公司名称,必填
     */
    @NotBlank(message = "参数companyName为空")
    @Size(max = 100, message = "参数companyName长度超过100")
    private String companyName;

    /**
     * 注册id,必填
     */
    @NotBlank(message = "参数id为空")
    @Size(max = 50, message = "参数id长度超过50")
    private String id;

    /**
     * 身份证号
     */
    @NotBlank(message = "参数idCard为空")
    @Size(max = 18, message = "参数idCard长度超过18")
    @Pattern(regexp = "^[1-9]\\d{5}(18|19|(2\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$" +
            "|^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$", message = "参数idCard格式错误")
    private String idCard;

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard= idCard;
    }
}

示例代码中,注解的message属性为参数校验错误时的提示信息。

3 请求参数校验示例

Controller层处理HTTP请求时,在实体类属性校验注解的帮助下,可以轻松判断请求参数是否符合要求。在请求参数前加上@Valid参数,即可在接收HTTP请求时,根据校验注解设置的约束条件进行参数校验。

在接收HTTP请求时,增加参数BindingResult result,可通过BindingResult 类的hasErrors方法判断参数校验是否通过,并通过getDefaultMessage方法获取参数错误提示信息。参数校验未通过时,可直接提示错误并返回请求失败结果给客户端。
示例代码如下:

@GetMapping(value = "/checkPerson")
    public int checkPerson(@Valid PersonEntity param, BindingResult result) {
        if (result.hasErrors()) {
            logger.error(result.getFieldError().getDefaultMessage());
            return 0;
        }
        return 1;
    }