【问题标题】:default value for JAX-RS POST bean propertyJAX-RS POST bean 属性的默认值
【发布时间】:2014-05-03 17:37:03
【问题描述】:

我有以下 JAX-RS 资源:

@POST
public Response createPerson(
                final User user) {
    ...
}

而用户 bean 是:

public class User {
    protected String lastName;
    protected String role;
    @DefaultValue("true")
    protected Boolean active;
    @DefaultValue("dd.MM.yyyy")
    protected String dateFormat;
...//getters and setters
}

当我没有为 'active' 和 'dateFormat' 指定值时,我希望它们填充默认值。但它们是空的。

我已阅读 @DefaultValue 的文档,它似乎不适合我的场景。但是我怎样才能让 jersey 用默认值填充这些缺失的属性呢?

编辑: 我想使用注释而不是代码(例如在构造函数中),因为我希望能够自动生成 API 文档(例如 swagger)。 Swagger 在提供参数信息时已经支持@DefaultValue,但如果使用另一种带有注释的方法,我可以对其进行扩展。

当然,我可以将代码与特定于 swagger 的注释一起使用,但这会导致重复。我宁愿使用相同的元信息来获取应用程序逻辑和文档。我可以使用自定义注释,同时扩展球衣和招摇。

【问题讨论】:

    标签: java jersey jax-rs jersey-2.0 swagger


    【解决方案1】:

    您可以直接在类定义中或在无参数构造函数中设置默认值,所有这些都在普通的旧 java 中,不需要任何注释。当使用原始类型而不是包装器时,active 将默认为 false。

    举个例子:

    public static class User {
        public boolean primActive;
        public Boolean wrapActive;
        public boolean consActive;
    
        public User() {
            consActive = true;
        }
    }
    

    资源:

    @POST
    @Path("foo")
    public User getUser( User user ) {
        return user;
    }
    

    发布空请求时(使用json时:{}),返回如下内容。

    {
        primActive: false
        consActive: true
    }
    

    【讨论】:

    • 谢谢,您的回答完全解决了我最初描述的问题。但我想要带有注释的解决方案,以便在生成 API 文档时使用此信息(请参阅我的编辑)
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多