在Java校验中,为了简化开发,JavaEE 6 中有一项子规范JSR303,叫做Bean Validator,其中
Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。
Spring也提供了@Valid 和 @Validated两个注解来实现验证功能,在Spring Validation中分成了以下几个模块。
| org.springframework.validation | 提供数据绑定和验证功能,用于业务层和/或UI层。 |
| org.springframework.validation.annotation | 基于注解形式的支持类 |
| org.springframework.validation.beanvalidation | 用于将JSR-303bean验证提供程序(如Hibernate Validator)集成到Spring ApplicationContext中的支持类,特别是与Spring的数据绑定和验证API集成的支持类。 |
| org.springframework.validation.support | 用于处理验证结果的支持类。 |
使用以及源码阅读:
使用:
@RestController
@RequestMapping("/index")
public class IndexController {
@PostMapping("/test")
public IMOOCJSONResult sixNewItems (@Validated Orders orders, BindingResult bindingResult){
if (bindingResult.hasErrors()) {
List<ObjectError> errorList = bindingResult.getAllErrors();
for (ObjectError error : errorList) {
System.out.println(error.getCode()+" msg="+ error.getDefaultMessage());
}
return null;
}
return IMOOCJSONResult.ok(true);
}
}
@Data
public class Orders {
/**
* 订单主键 同时也是订单编号
*/
@Id
private String id;
/**
* 用户id
*/
@NotNull
@Column(name = "user_id")
private String userId;
@Valid
private List<OrderStatus> orderStatusList;
}

本文探讨了Java校验中的JSR303 Bean Validation规范,重点分析了Hibernate Validator作为其实现。同时,文章深入研究了Spring中的@Valid和@Validated注解,以及它们如何与Spring Validation模块配合工作。在Spring的执行流程中,解析请求参数并调用Validator进行校验。SpringValidatorAdapter作为适配器,实现了javax.validation.Validator和Spring的SmartValidator接口,确保了两者之间的兼容性。
2051

被折叠的 条评论
为什么被折叠?



