有时可能需要在Spring MVC @Controller中使用手动验证。 使用Spring的org.springframework.validation.ValidationUtils类非常简单。 了解如何在两种不同的情况下调用验证器。
方案1 –调用验证
在这种情况下,我有一个带有用户名字段的用户表单。 用户名字段使用自定义验证器进行验证,以验证例如数据库中的存在。
public class User {@UserExistsprivate String username;}
在控制器类中,我有一个处理该对象的POST方法的方法:
@Autowired
private org.springframework.validation.Validator validator;@RequestMapping(value = "/user", method = RequestMethod.POST)
public String validate(@ModelAttribute User user, Errors errors) {ValidationUtils.invokeValidator(validator, user, errors);if (errors.hasErrors()) {// error, show errors to the user}// success, form is valid!
}
org.springframework.validation.ValidationUtils
是用于调用org.springframework.validation.Validator
的类。
请注意,用户参数后面是org.springframework.validation.Errors
对象。 Spring初始化了这个对象,但是它是空的,可以传递给invokeValidator
方法。
方案2 –通过提示调用验证
在这种情况下,用户表单变得更加复杂:
@GroupSequence(value = {ValidationOrder.First.class, ValidationOrder.Second.class})
interface ValidationOrder {interface First {}interface Second {}
}public class User {@UserExists(groups = ValidationOrder.First.class)@UserIsEntitledToDiscount(groups = ValidationOrder.Second.class)private String username;}
感谢@GroupSequence
我可以决定验证顺序。 要触发验证,我需要将其他参数传递给invokeValidator
方法,以便正确使用组:
ValidationUtils.invokeValidator(validator, user, errors, ValidationOrder.class);
源代码
源代码包含所有这三种方法,因此您可以快速比较它们: https : //github.com/kolorobot/spring-mvc-beanvalidation11-demo
翻译自: https://www.javacodegeeks.com/2016/04/spring-mvc-trgger-manual-validation-form-object.html