手动调用Spring Annotation Validation
我正在使用Hibernate和Spring Annotations进行大量validation,如下所示:
public class Account { @NotEmpty(groups = {Step1.class, Step2.class}) private String name; @NotNull(groups = {Step2.class}) private Long accountNumber; public interface Step1{} public interface Step2{} }
然后在控制器中调用它:
public String saveAccount(@ModelAttribute @Validated({Account.Step1.class}) Account account, BindingResult result) { //some more code and stuff here return ""; }
但我想根据控制器方法中的一些逻辑来决定使用的组。 有没有办法手动调用validation? 像result = account.validate(Account.Step1.class)
?
我知道创建自己的Validator类,但这是我想要避免的,我宁愿只使用类变量本身的注释。
在回答中比Jaiwo99更进一步:
// org.springframework.validation.SmartValidator - implemented by // LocalValidatorFactoryBean, which is funny as it is not a FactoryBean per se (just saying) @Autowired SmartValidator validator; public String saveAccount(@ModelAttribute Account account, BindingResult result) { // ... custom logic validator.validate(account, result, Account.Step1.class); if (result.hasErrors()) { // ... on binding or validation errors } else { // ... on no errors } return ""; }
如果您有兴趣,可以链接到SmartValidator JavaDoc 。
这是JSR 303规范的代码示例
Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); Driver driver = new Driver(); driver.setAge(16); Car porsche = new Car(); driver.setCar(porsche); Set> violations = validator.validate( driver );
所以,是的,您可以从validation器工厂获取validation器实例并自行运行validation,然后检查是否存在违规。 您可以在javadoc中看到Validator它还将接受要validation的组数组。
显然,这直接使用JSR-303validation而不是通过Springvalidation,但我相信如果在类路径中找到弹簧validation注释将使用JSR-303
如果您已正确配置所有内容,则可以执行以下操作:
@Autowired Validator validator;
然后,您可以使用它来validation您的对象。
并且:
@Autowired @Qualifier("mvcValidator") Validator validator; ... violations = validator.validate(account);
- JPA使用替代“persistence.xml”
- TransactionRequiredException执行更新/删除查询
- 将Hibernate实体映射为未知的DiscriminatorValue for InheritanceType.SINGLE_TABLE
- BCrypt.checkpw()无效的盐版本exception
- Java:Hibernate没有看到DataBase的变化
- 如何让Hibernate在与JPA一起使用时自动在数据库中创建表?
- LazyInitializationException,同时使用TestNG对Spring中使用的Hibernate实体类进行unit testing
- 在Hibernate中持久化LinkedList
- 在命名空间(,)中找到多个表 – SchemaExtractionException