【问题标题】:JAX-RS serialize only few propertiesJAX-RS 仅序列化少数属性
【发布时间】:2020-03-20 16:19:50
【问题描述】:

我们有一个像下面这样的 DTO

public class Student {
    private String name;
    private String id;
    private ExamResults results;
    private Address residentialAddress;
    private Address permanentAddress;
    // setter and getter methods
}

同一个 DTO 被多个端点使用,例如 student/details/{studId}、student/details/{studId}/results

在 student/details/{studId} 端点中,我们不填充 results 属性。但它仍然在响应中返回为 null 。

同样,在 student/details/{studId}/results 中,我们不会填充 permanentAddressresidentialAddress,但它们在响应中仍然返回为 null。

基本上,我想根据端点控制哪些属性被序列化,而不管它们是否为空。

谢谢。

【问题讨论】:

标签: java rest jax-rs


【解决方案1】:

你可以尝试使用

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Student {

【讨论】:

  • 此注解来自 jackson,并且仅当底层 JAX-RS 实现在内部使用 jackson 时才有效。由于不同应用服务器的底层实现不同,因此该解决方案可能无法正常工作。
  • 但实际上您负责库管理(构建工具:maven、gradle、ant 等)。应用服务器不会改变它。
  • 我们不想管理 jaxrs 库,想使用默认应用服务器的实现。
  • 抱歉,我已经编辑了我的问题。我想控制哪些属性被序列化,无论它们是否为空。
  • 在这种情况下,您可以尝试编写自定义 JsonSerializer 并实现所有规则。 (杰克逊)
猜你喜欢
  • 2016-12-15
  • 2021-12-12
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多