<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.8.Final</version>
</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(value) | 被注释的元素必须符合指定的正则表达式 |
hibernate validator中扩展定义了如下注解:
注解 | 说明 |
@NotBlank | 被注释的元素不能为null,且长度必须大于0,只能用于注解字符串 |
被注释的元素必须是电子邮箱地址 | |
@Length(min=,max=) | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的元素值不为null且不为空,支持字符串、集合、Map和数组类型 |
@Range | 被注释的元素必须在规定的范围内 |
public Result deleteUser( Long id) {
// do something
}
// 单参数校验需要加的注解
public class UserController {
// do something
}
public Result addUser( UserAO userAo) {
// do something
}
public class UserAO {
private String name;
private Integer age;
……
}
public interface UpdateAction {
}
public class UserAO {
private Long id;
private String name;
private Integer age;
……
}
public Result addUser(@Validated UserAO userAo) {
// do something
}
public Result updateUser(@Validated({Default.class, UpdateAction.class}) UserAO userAo) {
// do something
}
public class UserAO {
private Long id;
private String name;
private Integer age;
private Phone phone;
……
}
public class Phone {
private String operatorType;
private String phoneNum;
}
public class GlobalExceptionHandler {
Result handleException(Throwable e, HttpServletRequest request){
// 异常处理
}
}
if(e instanceof MissingServletRequestParameterException){
Result result = Result.buildErrorResult(ErrorCodeEnum.PARAM_ILLEGAL);
String msg = MessageFormat.format("缺少参数{0}", ((MissingServletRequestParameterException) e).getParameterName());
result.setMessage(msg);
return result;
}
if(e instanceof ConstraintViolationException){
// 单个参数校验异常
Result result = Result.buildErrorResult(ErrorCodeEnum.PARAM_ILLEGAL);
Set<ConstraintViolation<?>> sets = ((ConstraintViolationException) e).getConstraintViolations();
if(CollectionUtils.isNotEmpty(sets)){
StringBuilder sb = new StringBuilder();
sets.forEach(error -> {
if (error instanceof FieldError) {
sb.append(((FieldError)error).getField()).append(":");
}
sb.append(error.getMessage()).append(";");
});
String msg = sb.toString();
msg = StringUtils.substring(msg, 0, msg.length() -1);
result.setMessage(msg);
}
return result;
}
if (e instanceof BindException){
// get请求的对象参数校验异常
Result result = Result.buildErrorResult(ErrorCodeEnum.PARAM_ILLEGAL);
List<ObjectError> errors = ((BindException) e).getBindingResult().getAllErrors();
String msg = getValidExceptionMsg(errors);
if (StringUtils.isNotBlank(msg)){
result.setMessage(msg);
}
return result;
}
private String getValidExceptionMsg(List<ObjectError> errors) {
if(CollectionUtils.isNotEmpty(errors)){
StringBuilder sb = new StringBuilder();
errors.forEach(error -> {
if (error instanceof FieldError) {
sb.append(((FieldError)error).getField()).append(":");
}
sb.append(error.getDefaultMessage()).append(";");
});
String msg = sb.toString();
msg = StringUtils.substring(msg, 0, msg.length() -1);
return msg;
}
return null;
}
if (e instanceof MethodArgumentNotValidException){
// post请求的对象参数校验异常
Result result = Result.buildErrorResult(ErrorCodeEnum.PARAM_ILLEGAL);
List<ObjectError> errors = ((MethodArgumentNotValidException) e).getBindingResult().getAllErrors();
String msg = getValidExceptionMsg(errors);
if (StringUtils.isNotBlank(msg)){
result.setMessage(msg);
}
return result;
}
DataWorks官方入门电子书出版啦,零基础入门大数据开发治理,全面了解DataWorks十大功能模块,快速上手DataWorks核心功能。
点击阅读原文即可下载~