引入相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
常用的约束注解:
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
@URL(protocol=,host=, port=, regexp=, flags=) 被注释的字符串必须是一个有效的url
@CreditCardNumber 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性
@ScriptAssert(lang=, script=, alias=) 要有Java Scripting API 即JSR 223 (“Scripting for the JavaTM Platform”)的实现
@SafeHtml(whitelistType=, additionalTags=) classpath中要有jsoup包
pojo:
@Data
public class UserInfo {
//主键ID
@Pattern(regexp = "^[A-Za-z0-9]{34}$", message = "ERROR_UID")
private String uid;
//性别0女1男
@Pattern(regexp = "[0|1]", message = "ERROR_SEX")
private String sex;
//用户名
@NotNull(message = "PARAM_NULL")
private String userName;
}
controller:
@GetMapping(value = "test")
public void h(@Validated @RequestBody UserInfo userInfo){
System.out.println(userInfo);
}
Exception:
//MethodArgumentNotValidException处理
else if (ex instanceof MethodArgumentNotValidException) {
MethodArgumentNotValidException e = (MethodArgumentNotValidException) ex;
//获取抛出的异常信息
String msg = Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage();
//根据信息获取对应枚举
ResultEnum resultEnum = ResultEnum.valueOf(msg);
resultVO = new ResultVO<ResultEnum>(ConvertUtil.Obj2int(resultEnum.getCode(), resultEnum.getCode()), resultEnum.getMessage());
return resultVO;
}
ResultEnum:
public enum ResultEnum {
SUCCESS (1, "成功"),
ERROR_UID(-12901, "参数UID不合法,应为34位字符串"),
ERROR_SEX(-12902,"性别只能为0或者1"),
PARAM_NULL(-12903,"有必填参数为空,请检查"),
;
private final Integer code;
private final String message;
ResultEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
测试: