validation - JSR 303 中的 GroupSequence 和有序评估

标签 validation spring-mvc bean-validation

在我们的应用程序中,我们有这样一个案例:

  • 应按特定顺序评估约束。 (便宜到贵)
  • 在违反每个字段后不应评估约束。
  • 应验证所有字段。

  • 对于前两个,groupsequence 非常适合。但是,对于我的第三个要求,我找不到解决方法。
    public class AccountBean {
    
       @CheepValidation
       @ExpensiveValidation
       @VeryExpensiveValidation
       private String name;
    
       @CheepValidation
       @ExpensiveValidation
       @VeryExpensiveValidation
       private String surname
    }
    

    例如,

    假设,对于姓名字段来说,VeryExpensiveValidationconstraint 被违反,而对于姓氏字段 ExpensiveValidation 约束被违反。

    对于这种情况,我应该显示:

    对于字段名称:只有非常昂贵的验证错误消息
    对于字段姓氏:只有 ExpensiveValidation 错误消息

    请注意,对于字段姓氏,我们没有评估非常昂贵的验证约束。

    有没有办法用 JSR 303 实现它?

    谢谢

    最佳答案

    您可以使用组和@GroupSequence,但它有点笨拙。

    public class AccountBean {
    
       @CheapValidation(groups=Name1.class)
       @ExpensiveValidation(groups=Name2.class)
       @VeryExpensiveValidation(groups=Name3.class)
       String name;
    
       @CheapValidation(groups=Surname1.class)
       @ExpensiveValidation(groups=Surname2.class)
       @VeryExpensiveValidation(groups=Surname3.class)
       String surname;
    
       public interface Name1 {}
       public interface Name2 {}
       public interface Name3 {}
       @GroupSequence({Name1.class, Name2.class, Name3.class})
       public interface Name {}
    
       public interface Surname1 {}
       public interface Surname2 {}
       public interface Surname3 {}
       @GroupSequence({Surname1.class, Surname2.class, Surname3.class})
       public interface Surname {}
    }
    

    然后验证:
    validator.validate(myAccountBean,
        AccountBean.Name.class, AccountBean.Surname.class)
    

    关键是要有两个完全独立的组序列。

    不幸的是,您似乎必须明确列出要验证的所有字段的组。我无法让它与“默认”@GroupSequence 一起工作。任何人都可以改进吗?

    关于validation - JSR 303 中的 GroupSequence 和有序评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5285070/

    相关文章:

    php - Symfony2 验证在实体关系/关联时不起作用

    java - 在 Spring 测试中使用 @Autowired NoSuchBeanDefinitionException

    java - Jersey,JSR 303 验证 - ValidationError 中的自定义 "path"和 "invalidValue"

    Django 表单验证取决于表单集中的数据

    jquery - jquery 中输入的简单数字验证

    regex - 工作正则表达式在 Laravel 验证中不起作用

    java - 子类getter上的@NotNull影响父类表

    java - 使用 Jackson ObjectMapper 的 ClassNotFound 异常

    java - Spring框架和Spring Boot的区别?

    spring - 如何使用 spring 存储库进行 bean 验证?