引入jar包
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.17.Final</version>
</dependency>
Hibernate Validator 提供的校验注解
注解 | 解释 |
---|---|
@NotNull | 值不能为null |
@NotBlank | 字符串必须包含字符 |
@NotEmpty | 字符串不能为null,集合必须有元素 |
@Null | 值必须为空 |
@Pattern(regex=) | 字符串必须满足正则 |
@Size(min=, max=) | 集合的长度必须在min-max之间 |
字符串必须是Email | |
@Length(min=, max=) | 字符串长度必须在min-max之间 |
@Range(min=, max=) | min <= 数字 <= max |
@SafeHtml | 字符串是安全的 HTML |
@AssertFalse | 布尔值为 false |
@AssertTrue | 布尔值为 true |
@DecimalMax(value=,inclusive=) | 值必须小于等于(inclusive=true)/小于(inclusive=false)指定的value值。可注解在字符串值上 |
@DecimalMin(value=,inclusive=) | 值必须大于等于(inclusive=true)/大于(inclusive=false)指定的value值。可注解在字符串值上 |
@Digits(integer=,fraction=) | 数字格式校验。integer指定整数部分长度,fraction指定小数部分长度 |
@Future | 值必须是未来的日期 |
@Past | 值必须是过去的日期 |
@Max | 值必须小于等于value值。不可注解在字符串值上 |
@Min | 值必须大于等于value值。不可注解在字符串值上 |
代码
Controller 层需要对传入参数添加@Valid注解,使得校验生效,如下:
@RestController
public class WebController {
@PostMapping("user")
public CommonResult user(@Valid UserParam userParam) {
System.out.println(userParam);
return CommonResult.success(null);
}
}
实体相关验证注解
@Getter
@Setter
public class UserParam {
private Long id;
@NotBlank(message = "用户名不能为空")
@Length(max = 16, message = "用户名长度必须小于16")
private String username;
@Pattern(regexp = "[A-Z][a-z][0-9]")
private String password;
@Email(message = "邮箱格式错误")
private String email;
}
全局异常处理
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandlerAdvice {
/**
* 接口参数异常校验
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public CommonResult handleIllegalParamException(MethodArgumentNotValidException e) {
if (e.getBindingResult().hasErrors()) {
return CommonResult.failed(ResultCode.VALIDATE_FAILED);
}
return CommonResult.failed(ResultCode.FAILED);
}
@ExceptionHandler(Exception.class)
public CommonResult handleException(Exception e) {
return CommonResult.failed(ResultCode.FAILED);
}
}