在 POST 中使用 JAX-RS `@DefaultValue` 作为 bean 属性

问题描述 投票:0回答:1

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

Javadocs,它似乎不适合我的场景。但我怎样才能要求 Jersey 用默认值填充这些缺失的属性呢?

编辑: 我想使用注释而不是代码(例如在构造函数中),因为我希望能够自动生成 API 文档(例如 Swagger)。 Swagger 在提供参数信息时已经支持

@DefaultValue
,但如果使用另一种带注释的方法,我可以扩展它。

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

java jersey jax-rs jersey-2.0 swagger
1个回答
4
投票

您可以直接在类定义中或在无参数构造函数中设置默认值,所有这些都在普通的旧 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
}
© www.soinside.com 2019 - 2024. All rights reserved.