Bean Validation 规范内嵌的约束注解定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
约束注解名称 约束注解说明
@Null 验证对象是否为空
@NotNull 验证对象是否为非空
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
@Min 验证 Number 和 String 对象是否大等于指定的值
@Max 验证 Number 和 String 对象是否小等于指定的值
@DecimalMin 验证 Number 和 String 对象是否大等于指定的值,小数存在精度
@DecimalMax 验证 Number 和 String 对象是否小等于指定的值,小数存在精度
@Size 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Digits 验证 Number 和 String 的构成是否合法
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
querystring接收参数/ POST Form接收参数
这两种合在一起写是因为他们接收的方式都是一样的,可以用多个字段分开接收
- 典型的POST Multi Form 示例
@Validated
@RestController
public class PictureAPIs {
public ApiResult add(@RequestParam("file") MultipartFile file,
@NotNull(message = "xxx不得为空!")
@Size(min = 32, max = 32, message = "必须是32位的字符串")
@RequestParam String gidUnique,
@Pattern(regexp = "^(taobao_picture_upload|taobao_product_img_upload|taobao_item_img_upload|taobao_product_add)$",message = "type可选值:XXX")
@RequestParam("type") String type,
@RequestParam("i") String i) {
}
}
-
@Validated @Validated是最重要的,在每个需要验证控制器参数的 API 上面都需要加上这个注解
-
@RequestParam 这个是很重要的,每个提交的参数都需要加上这个标签
@RequestParam("file")表示接收 name=file 的参数提交. -
@NotNull 非空验证,这个很常见
-
@Size 字符串长度上下限
-
@Pattern 正则
接收JSON参数
1
2
3
4
5
6
@RequestMapping(value = "/api/picture/add/base64",method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public ApiResult add(
@Validated
@RequestBody PictureAddBase64RequestBody body,
@CookieValue(name = CookieMessageConst.ACCESS_TOKEN_KEY, required = false) String token) {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class PictureAddBase64RequestBody extends PictureAddBaseRequestBody {
private static final long serialVersionUID = 6185318090948651724L;
@NotNull(message = "base64不得为空!")
String base64;
public String getBase64() {
return base64;
}
public void setBase64(String base64) {
this.base64 = base64;
}
}
以这个为例,参数的校验标签放在PictureAddBase64RequestBody的字段上面
其他
- 验证方法
1
2
3
4
5
//验证
public static<T> void validate(T t){
Validator validator = factory.getValidator();
Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);
for(ConstraintViolation<T> constraintViolation : constraintViolations) { System.out.println(constraintViolation.getMessage()); } }
参考链接:
Built-in Constraint Annotation Definitions in Bean Validation Specification
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Constraint Annotation Name Constraint Annotation Description
@Null Validates that the object is null
@NotNull Validates that the object is not null
@AssertTrue Validates that the Boolean object is true
@AssertFalse Validates that the Boolean object is false
@Min Validates that Number and String objects are greater than or equal to the specified value
@Max Validates that Number and String objects are less than or equal to the specified value
@DecimalMin Validates that Number and String objects are greater than or equal to the specified value, with decimal precision
@DecimalMax Validates that Number and String objects are less than or equal to the specified value, with decimal precision
@Size Validates that the object (Array, Collection, Map, String) length is within the given range
@Digits Validates that the composition of Number and String is legal
@Past Validates that Date and Calendar objects are before the current time
@Future Validates that Date and Calendar objects are after the current time
@Pattern Validates that the String object conforms to the rules of the regular expression
Receiving Parameters via QueryString / POST Form
These two are written together because they receive parameters in the same way, and can receive multiple fields separately.
- Typical POST Multi Form Example
@Validated
@RestController
public class PictureAPIs {
public ApiResult add(@RequestParam("file") MultipartFile file,
@NotNull(message = "xxx cannot be empty!")
@Size(min = 32, max = 32, message = "Must be a 32-character string")
@RequestParam String gidUnique,
@Pattern(regexp = "^(taobao_picture_upload|taobao_product_img_upload|taobao_item_img_upload|taobao_product_add)$",message = "type optional values:XXX")
@RequestParam("type") String type,
@RequestParam("i") String i) {
}
}
-
@Validated @Validated is the most important. This annotation needs to be added to every API that requires controller parameter validation.
-
@RequestParam This is very important. Every submitted parameter needs to have this tag.
@RequestParam("file")means receiving a parameter submission with name=file. -
@NotNull Non-null validation, this is very common
-
@Size String length upper and lower limits
-
@Pattern Regular expression
Receiving JSON Parameters
1
2
3
4
5
6
@RequestMapping(value = "/api/picture/add/base64",method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public ApiResult add(
@Validated
@RequestBody PictureAddBase64RequestBody body,
@CookieValue(name = CookieMessageConst.ACCESS_TOKEN_KEY, required = false) String token) {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class PictureAddBase64RequestBody extends PictureAddBaseRequestBody {
private static final long serialVersionUID = 6185318090948651724L;
@NotNull(message = "base64 cannot be empty!")
String base64;
public String getBase64() {
return base64;
}
public void setBase64(String base64) {
this.base64 = base64;
}
}
Using this as an example, the parameter validation tags are placed on the fields of PictureAddBase64RequestBody.
Other
- Validation Method
1
2
3
4
5
//Validate
public static<T> void validate(T t){
Validator validator = factory.getValidator();
Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);
for(ConstraintViolation<T> constraintViolation : constraintViolations) { System.out.println(constraintViolation.getMessage()); } }
Reference Links:
- Custom Annotations and Parameter Validation
- Java Annotations + Login Verification / Permission Control Based on Annotations & Interceptors
- Bean Validation constraints
- Bean Validation Technical Specification Feature Overview
- SpringMVC Data Validation - Chapter 7 Annotation-based Controller Data Validation, Type Conversion and Formatting - Learning SpringMVC with Kaitao
Bean Validation仕様に組み込まれた制約アノテーション定義
1
2
3
4
5
6
7
8
9
10
11
12
13
14
制約アノテーション名 制約アノテーション説明
@Null オブジェクトがnullかどうかを検証
@NotNull オブジェクトが非nullかどうかを検証
@AssertTrue Booleanオブジェクトがtrueかどうかを検証
@AssertFalse Booleanオブジェクトがfalseかどうかを検証
@Min NumberおよびStringオブジェクトが指定された値以上かどうかを検証
@Max NumberおよびStringオブジェクトが指定された値以下かどうかを検証
@DecimalMin NumberおよびStringオブジェクトが指定された値以上かどうかを検証(小数の精度が存在)
@DecimalMax NumberおよびStringオブジェクトが指定された値以下かどうかを検証(小数の精度が存在)
@Size オブジェクト(Array、Collection、Map、String)の長さが指定された範囲内かどうかを検証
@Digits NumberおよびStringの構成が有効かどうかを検証
@Past DateおよびCalendarオブジェクトが現在時刻より前かどうかを検証
@Future DateおよびCalendarオブジェクトが現在時刻より後かどうかを検証
@Pattern Stringオブジェクトが正規表現の規則に準拠しているかどうかを検証
querystringでパラメータを受信 / POST Formでパラメータを受信
これら2つを一緒に書くのは、受信方法が同じで、複数のフィールドを個別に受信できるためです。
- 典型的なPOST Multi Formの例
@Validated
@RestController
public class PictureAPIs {
public ApiResult add(@RequestParam("file") MultipartFile file,
@NotNull(message = "xxxは空にできません!")
@Size(min = 32, max = 32, message = "32文字の文字列である必要があります")
@RequestParam String gidUnique,
@Pattern(regexp = "^(taobao_picture_upload|taobao_product_img_upload|taobao_item_img_upload|taobao_product_add)$",message = "typeのオプション値:XXX")
@RequestParam("type") String type,
@RequestParam("i") String i) {
}
}
-
@Validated @Validatedは最も重要です。コントローラーパラメータの検証が必要なすべてのAPIにこのアノテーションを追加する必要があります。
-
@RequestParam これは非常に重要です。送信されたすべてのパラメータにこのタグを追加する必要があります。
@RequestParam("file")は、name=fileのパラメータ送信を受信することを意味します。 -
@NotNull 非null検証、これは非常に一般的です
-
@Size 文字列の長さの上限と下限
-
@Pattern 正規表現
JSONパラメータの受信
1
2
3
4
5
6
@RequestMapping(value = "/api/picture/add/base64",method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public ApiResult add(
@Validated
@RequestBody PictureAddBase64RequestBody body,
@CookieValue(name = CookieMessageConst.ACCESS_TOKEN_KEY, required = false) String token) {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class PictureAddBase64RequestBody extends PictureAddBaseRequestBody {
private static final long serialVersionUID = 6185318090948651724L;
@NotNull(message = "base64は空にできません!")
String base64;
public String getBase64() {
return base64;
}
public void setBase64(String base64) {
this.base64 = base64;
}
}
この例では、パラメータ検証タグはPictureAddBase64RequestBodyのフィールドに配置されます。
その他
- 検証メソッド
1
2
3
4
5
//検証
public static<T> void validate(T t){
Validator validator = factory.getValidator();
Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);
for(ConstraintViolation<T> constraintViolation : constraintViolations) { System.out.println(constraintViolation.getMessage()); } }
参考リンク:
Встроенные определения аннотаций ограничений в спецификации Bean Validation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Имя аннотации ограничения Описание аннотации ограничения
@Null Проверяет, является ли объект null
@NotNull Проверяет, является ли объект не null
@AssertTrue Проверяет, является ли Boolean объект true
@AssertFalse Проверяет, является ли Boolean объект false
@Min Проверяет, больше или равно ли Number и String объекты указанному значению
@Max Проверяет, меньше или равно ли Number и String объекты указанному значению
@DecimalMin Проверяет, больше или равно ли Number и String объекты указанному значению, с десятичной точностью
@DecimalMax Проверяет, меньше или равно ли Number и String объекты указанному значению, с десятичной точностью
@Size Проверяет, находится ли длина объекта (Array, Collection, Map, String) в заданном диапазоне
@Digits Проверяет, является ли состав Number и String допустимым
@Past Проверяет, находятся ли Date и Calendar объекты до текущего времени
@Future Проверяет, находятся ли Date и Calendar объекты после текущего времени
@Pattern Проверяет, соответствует ли String объект правилам регулярного выражения
Получение параметров через QueryString / POST Form
Эти два написаны вместе, потому что они получают параметры одинаковым способом и могут получать несколько полей отдельно.
- Типичный пример POST Multi Form
@Validated
@RestController
public class PictureAPIs {
public ApiResult add(@RequestParam("file") MultipartFile file,
@NotNull(message = "xxx не может быть пустым!")
@Size(min = 32, max = 32, message = "Должна быть 32-символьная строка")
@RequestParam String gidUnique,
@Pattern(regexp = "^(taobao_picture_upload|taobao_product_img_upload|taobao_item_img_upload|taobao_product_add)$",message = "type опциональные значения:XXX")
@RequestParam("type") String type,
@RequestParam("i") String i) {
}
}
-
@Validated @Validated является наиболее важным. Эта аннотация должна быть добавлена к каждому API, которое требует проверки параметров контроллера.
-
@RequestParam Это очень важно. Каждый отправленный параметр должен иметь этот тег.
@RequestParam("file")означает получение отправки параметра с name=file. -
@NotNull Проверка на не-null, это очень распространено
-
@Size Верхний и нижний пределы длины строки
-
@Pattern Регулярное выражение
Получение JSON параметров
1
2
3
4
5
6
@RequestMapping(value = "/api/picture/add/base64",method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public ApiResult add(
@Validated
@RequestBody PictureAddBase64RequestBody body,
@CookieValue(name = CookieMessageConst.ACCESS_TOKEN_KEY, required = false) String token) {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class PictureAddBase64RequestBody extends PictureAddBaseRequestBody {
private static final long serialVersionUID = 6185318090948651724L;
@NotNull(message = "base64 не может быть пустым!")
String base64;
public String getBase64() {
return base64;
}
public void setBase64(String base64) {
this.base64 = base64;
}
}
Используя это в качестве примера, теги проверки параметров размещаются на полях PictureAddBase64RequestBody.
Другое
- Метод проверки
1
2
3
4
5
//Проверка
public static<T> void validate(T t){
Validator validator = factory.getValidator();
Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);
for(ConstraintViolation<T> constraintViolation : constraintViolations) { System.out.println(constraintViolation.getMessage()); } }
Ссылки:
- Пользовательские аннотации и проверка параметров
- Java аннотации + Проверка входа / Управление разрешениями на основе аннотаций и перехватчиков
- Bean Validation constraints
- Обзор функций технической спецификации Bean Validation
- Проверка данных SpringMVC - Глава 7 Проверка данных контроллера на основе аннотаций, преобразование типов и форматирование - Изучение SpringMVC с Kaitao