java - JAX-RS POST bean 属性的默认值

标签 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
}

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

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

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

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

最佳答案

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

关于java - JAX-RS POST bean 属性的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447752/

相关文章:

java - 通过蓝牙在 JavaFX 和 Android 之间传输图像

java - 当 getter 同步时 Action 是否同步?

java - Keycloak-Tomcat-适配器 : Is there a alternative path for 'keycloak.json' ?

java - Dropwizard 0.8.1 : multiple file upload

java - 在 Jersey webapp 启动时初始化数据库

jakarta-ee - 如何将 CDI 依赖项注入(inject) JAX-RS ClientRequestFilter 提供程序

java - 通过 apache HttpClient 3.1 在大型 HTTP MultipartRequestEntity 上发生 OutOfMemory

java - Jersey:根据文件扩展名或 InputStream 设置响应内容类型?

java - 如何发布具有相同基地址的多个休息端点?

java - JAX-RS response.getEntity 在发布后返回 null