我正在使用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完成此任务?
你可以使用@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);