【问题标题】:Java Jackson Serialization ignore specific nested properties with AnnotationsJava Jackson 序列化忽略带有注释的特定嵌套属性
【发布时间】:2019-07-24 08:14:02
【问题描述】:

我正在使用 jackson(带有 spring boot)来返回一些 DTO,例如 json。问题是我有特定的 DTO,其中包含嵌套对象,其中包含另一个对象。我是否可以直接从 DTO 忽略一些嵌套属性,而不对嵌套对象进行任何注释(因为它们在另一个 DTO 中使用)

public class MyDTO {

  private MyObjectA a;

}

public class MyObjectA a {

  private MyNestedObject b;

}

我想在序列化 MyDTO 时排除 MyNestedObject b 我尝试过使用@JsonIgnoreProperties,但它不适用于嵌套对象。 我可以仅使用 MyDTO 类中的注释来完成此任务吗?

【问题讨论】:

  • 我的问题不完全一样。我在问如何仅使用注释来实现这一点。
  • 您的问题实际上是我指出的问题的一个特例。

标签: java spring-boot jackson jackson-databind jackson2


【解决方案1】:

您可以使用@JsonView。您需要注释一些嵌套对象,但这不是一种静态的东西,它会隐藏其他 DTO 左右的所有内容。

例如,您可以声明要使用的以下视图:

public class View {
    public static class AllButMyNestedObject {
    }
    public static class AlsoMyNestedObject 
        extends AllButMyNestedObject {
    }    
}

然后注释你的类,如:

@JsonView(AllButMyNestedObject.class)
public class MyDTO {
    private MyObjectA a;
}

public class MyObjectA {
    @JsonView(AlsoMyNestedObject.class)
    private MyNestedObject b;
}

您可以使用 mapper 决定要序列化的内容,例如:

ObjectMapper mapper = new ObjectMapper();
String result = mapper
    .writerWithView(View.AlsoMyNestedObject.class)
// OR .writerWithView(View.AllButNestedObject.class)
    .writeValueAsString(myDto);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2014-11-11
    • 2012-02-01
    • 1970-01-01
    • 2020-08-01
    • 2015-01-12
    • 1970-01-01
    相关资源
    最近更新 更多