Ant*_*eev 10 java validation spring spring-mvc bean-validation
我在Spring控制器中有以下代码:
@Autowired
private javax.validation.Validator validator;
@RequestMapping(value = "/submit", method = RequestMethod.POST)
public String submitForm(CustomForm form) {
Set<ConstraintViolation<CustomForm>> errors = validator.validate(vustomForm);
...
}
Run Code Online (Sandbox Code Playgroud)
是否可以映射errors到Spring的BindingResult对象而无需手动完成所有错误并将其添加到BindingResult?像这样的东西:
// NOTE: this is imaginary code
BindingResult bindingResult = BindingResult.fromConstraintViolations(errors);
Run Code Online (Sandbox Code Playgroud)
我现在可以用CustomForm参数注释@Valid并让Spring注入BindingResult另一个方法的参数,但在我的情况下它不是一个选项.
// I know this is possible, but doesn't work for me
public String submitForm(@Valid CustomForm form, BindingResult bindingResult) {
...
}
Run Code Online (Sandbox Code Playgroud)
一种更简单的方法可能是使用Spring的抽象org.springframework.validation.Validator,您可以通过在上下文中使用此bean来获取验证器:
<bean id="jsr303Validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
@Autowired @Qualifier("jsr303Validator") Validator validator;
Run Code Online (Sandbox Code Playgroud)
有了这个抽象,你可以这样使用验证器,传入bindingResult:
validator.validate(obj, bindingResult);
Run Code Online (Sandbox Code Playgroud)
Spring 使用 SpringValidatorAdapter 将 javax.validation.ConstraintViolation 对象转换为 ObjectError 或 FieldError 对象,如绑定结果中所示。然后 BindStatus 使用消息源(如 Web 应用程序上下文本身)来转换错误。简而言之,你可以这样做:
SpringValidatorAdapter springValidator = new SpringValidatorAdapter(validator);
BindingResult bindingResult= new BeanPropertyBindingResult(myBeanToValidate, "myBeanName");
springValidator.validate(myBeanToValidate, bindingResult);
Run Code Online (Sandbox Code Playgroud)
这在编写单元测试时更容易,因为您甚至不需要创建 Spring 上下文。
| 归档时间: |
|
| 查看次数: |
5565 次 |
| 最近记录: |