JSR 提供的注解
注解 | 描述 |
---|---|
@AssertFalse | 所注解的元素必须是 Boolean 类型,并且值为 false |
@AssertTrue | 所注解的元素必须是 Boolean 类型,并且值为 true |
@DecimalMax | 所注解的元素必须是数字,并且它的值要小于或等于给定的 BigDecimalString 值 |
@DecimalMin | 所注解的元素必须是数字,并且它的值要大于或等于给定的 BigDecimalString 值 |
@Digits | 所注解的元素必须是数字,并且它的值必须有指定的位数 |
@Future | 所注解的元素的值必须是一个将来的日期 |
@Past | 所注解的元素的值必须是一个已过去的日期 |
@Max | 所注解的元素必须是数字,并且它的值要小于或等于给定的值 |
@Min | 所注解的元素必须是数字,并且它的值要大于或等于给定的值 |
@NotNull | 所注解元素的值必须不能为 null |
@Null | 所注解元素的值必须为 null |
@Pattern | 所注解的元素的值必须匹配给定的正则表达式 |
@Size | 所注解的元素的值必须是 String、集合或数组,并且它的长度要符合给定的范围 |
Hibernate Validator 提供的注解
注解 | 描述 |
---|---|
@NotBlank | 所注解的字符串必须不能为 null 且长度必须大于 0 |
所注解的元素必须是电子邮箱地址 | |
@Length | 所注解的字符串的大小必须在指定的范围内 |
@NotEmpty | 所注解的字符串必须非空 |
@Range | 所注解的数字必须在合适的范围内 |
参数校验示例
添加 @Validated 注解在控制器中启用校验
1
2
3
4
5
6
7
8
9
10
11
public class Controller {
public ObjectRestResponse insert( { String name)
// ...
}
}添加 @Validated 或 @Valid 注解在参数前启用校验
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Controller {
public ObjectRestResponse insert( { User user)
// ...
}
public ObjectRestResponse insert( { User user)
// ...
}
}
public class User {
private String name;
}通过 groups 对校验进行分组
@Validated 没有添加 groups 属性时,默认校验没有分组的校验属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Controller {
public ObjectRestResponse insert( { User user)
// ...
}
public ObjectRestResponse update( { User user)
// ...
}
}
public class User {
private String id;
private String name;
}嵌套对象校验
嵌套对象的校验必须在对象上添加
@Valid
注解1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Controller {
public ObjectRestResponse insert( { User user)
// ...
}
// 必须使用 @Valid
public ObjectRestResponse insert( { List<User> userList)
// ...
}
}
public class User {
private String id;
// 必须使用 @Valid
private UserInfo userInfo;
}
public class UserInfo {
private String name;
}使用全局异常处理返回错误信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class GlobalExceptionHandler {
public ObjectRestResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
return new ObjectRestResponse().rel(false)
.message(ex.getBindingResult().getFieldError().getDefaultMessage());
}
public ObjectRestResponse handleBindException(BindException ex) {
return new ObjectRestResponse().rel(false)
.message(ex.getBindingResult().getFieldError().getDefaultMessage());
}
}使用 BindingResult 返回错误信息
1
2
3
4
5
6
7
8
public ObjectRestResponse insert( { User user, BindingResult result)
if (result.hasErrors()) {
return new ObjectRestResponse().rel(false)
.message(result.getFieldError().getDefaultMessage());
}
// ...
}