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;
}