【问题标题】:Will JAX-RS support validation groups?JAX-RS 是否支持验证组?
【发布时间】:2017-01-29 18:11:52
【问题描述】:

来自 JSR-339:

为简单起见,JAX-RS 实现不需要支持默认以外的处理组。

这严重限制了 JAX-RS 中验证的实用性,因为例如对于创建和更新,您通常使用相同的模型对象,但是对于创建不应提供对象的 ID,而对于更新应提供 ID,可以使用验证组轻松验证。通常,在多个流程中使用的所有模型对象都无法验证。

我不理解简单的论点,因为 Bean Validation 已经支持组,因此 JAX-RS 实现只需将组传递给 Bean Validation 实现,如 Hibernate Validator。

那么有没有向 JAX-RS 添加验证组的计划?

【问题讨论】:

    标签: jax-rs bean-validation


    【解决方案1】:

    事实证明它确实支持验证组。来自同一个 JSR-339:

    @Valid 的存在将触发对装饰 Java bean 类的所有约束注解的验证。除非存在 @ConvertGroup 注释,否则此验证将在默认处理组中进行。

    例如,这是在我的自定义 CreateUpdate 组而不是 Default 组中验证 Account bean 的方法:

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    Response createAccount(@Valid @ConvertGroup(from = Default.class, to = Create.class)
        Account account)
    
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    Response updateAccount(@Valid @ConvertGroup(from = Default.class, to = Update.class)
        Account account)
    
    public class Account {
    
        @Null(groups = Create.class)
        @NotNull(groups = Update.class)
        private String Id;
    
    }
    
    public interface Create {}
    
    public interface Update {}
    

    【讨论】:

    • 太棒了!我一直在寻找这个很长时间。虽然我相信在示例中交换了 from/to 参数。
    • 请记住,将不再考虑将使用@Default 组的验证,如果将使用@ConvertGroup
    • 作为没有副作用的解决方案是您的新组扩展Default 之一。以这种方式仍然可以使用Default 验证。
    • 扩展为public class Update extends Default?
    • from = Default.class 是默认值,可以省略
    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2014-08-26
    • 2016-08-20
    • 2011-04-22
    • 2012-01-17
    相关资源
    最近更新 更多