JAX-RS POST bean属性的默认值

时间:2014-05-03 17:37:04

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

我有以下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
}

当我没有指定“活跃”的值时和' dateFormat'我希望它们可以填充默认值。但它们都是空的。

我已阅读@DefaultValue的文档,但它似乎不适合我的情景。但是我怎么能要求球衣用默认值来填补这些缺席属性呢?

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

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

1 个答案:

答案 0 :(得分:4)

您可以直接在类定义或no-arg构造函数中设置默认值,所有这些都在普通的旧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
}