Java Jackson Serialization使用Annotations忽略特定的嵌套属性

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

我正在使用jackson(使用spring boot)返回一些像json这样的DTO。问题是我有特定的DTO,它包含嵌套对象,其中包含另一个对象。我是否可以直接从DTO忽略一些嵌套属性,而在嵌套对象上没有任何Annottations(因为它们在另一个DTO中使用)

public class MyDTO {

  private MyObjectA a;

}

public class MyObjectA a {

  private MyNestedObject b;

}

我希望当我序列化MyDTO以排除MyNestedObject时我已尝试使用@JsonIgnoreProperties,但它不适用于嵌套对象。我是否可以在MyDTO课程中使用Annotations完成此任务?

java spring-boot jackson jackson-databind jackson2
1个回答
0
投票

你可以使用@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);
© www.soinside.com 2019 - 2024. All rights reserved.