update jsr303
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
|
||||
JSR303是Java为Bean数据合法性校验提供给的标准框架,已经包含在 JavaEE6.0 中、JSR303通过在Bean 属性中标注类似 @NotNull @Max 等标准的注解指定校验规则并通过标准的验证接口对 Bean进行验证
|
||||
|
||||
### 注解
|
||||
|
||||
|
||||
### JSR303中含有的注解
|
||||
|
||||
@ -22,6 +22,8 @@
|
||||
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### Hibernate Validator 附加的注解
|
||||
|
||||
```
|
||||
@ -34,21 +36,82 @@
|
||||
注:HIbernate Validator是JSR303的一个参考实现,除了支持所有标准的校验注解外,另外HIbernate Validator还有JSR-380的实现
|
||||
```
|
||||
|
||||
### 静态工具 手动校验BEAN
|
||||
|
||||
|
||||
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
|
||||
Validator validator = factory.getValidator();
|
||||
|
||||
AirportDTO dto = new AirportDTO();
|
||||
dto.setIataCode("PKX");
|
||||
dto.setThroughput("-1"); // 符合条件
|
||||
// data.setValue(1234567.789); // 不符合条件,整数部分超过6位
|
||||
// data.setValue(123456.78901); // 不符合条件,小数部分超过4位
|
||||
// data.setValue(-123.45); // 不符合条件,小于0
|
||||
|
||||
Set<ConstraintViolation<AirportDTO>> validate = validator.validate(dto,Update.class);
|
||||
for (ConstraintViolation<AirportDTO> violation : validate) {
|
||||
System.out.println(violation.getMessage());
|
||||
}
|
||||
}
|
||||
### @Validated @Valid 有什么区别
|
||||
|
||||
`@Validated` 是spring 中提供的注解用于在添加该注解的方法、类上触发bean 校验。
|
||||
|
||||
`@Valid` java自身的注解 用于校验嵌套对象(在spring 环境中,添加该注解同样会触发bean 校验)。
|
||||
|
||||
|
||||
|
||||
### 对象嵌套校验
|
||||
|
||||
@Valid 校验嵌套对象
|
||||
|
||||
```java
|
||||
|
||||
public class Project {
|
||||
|
||||
@NotBlank(message = "Project title must be present")
|
||||
@Size(min = 3, max = 20, message = "Project title size not valid")
|
||||
private String title;
|
||||
@Valid // 校验嵌套的对象
|
||||
private User owner;
|
||||
|
||||
}
|
||||
|
||||
public class User {
|
||||
// 校验规则
|
||||
@NotBlank(message = "User name must be present")
|
||||
@Size(min = 3, max = 50, message = "User name size not valid")
|
||||
private String name;
|
||||
|
||||
// 校验规则
|
||||
@NotBlank(message = "User email must be present")
|
||||
@Email(message = "User email format is incorrect")
|
||||
private String email;
|
||||
}
|
||||
|
||||
|
||||
|
||||
```
|
||||
|
||||
@Valid 校验可迭代对象
|
||||
|
||||
```java
|
||||
// @Valid 定义在容器对象上
|
||||
@Valid
|
||||
private List<Task> tasks;
|
||||
|
||||
// @Valid (JSR303注解也可以)定义在泛型参数上
|
||||
private List<@Valid Task> tasks;
|
||||
|
||||
private Map<@Valid User, @Valid Task> assignedTasks;
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Validator Api 手动校验BEAN
|
||||
|
||||
|
||||
```java
|
||||
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
|
||||
Validator validator = factory.getValidator();
|
||||
|
||||
AirportDTO dto = new AirportDTO();
|
||||
dto.setIataCode("PKX");
|
||||
dto.setThroughput("-1"); // 符合条件
|
||||
// data.setValue(1234567.789); // 不符合条件,整数部分超过6位
|
||||
// data.setValue(123456.78901); // 不符合条件,小数部分超过4位
|
||||
// data.setValue(-123.45); // 不符合条件,小于0
|
||||
|
||||
Set<ConstraintViolation<AirportDTO>> validate = validator.validate(dto,Update.class);
|
||||
for (ConstraintViolation<AirportDTO> violation : validate) {
|
||||
System.out.println(violation.getMessage());
|
||||
}
|
||||
|
||||
```
|
||||
|
Reference in New Issue
Block a user