Java Jackson序列化会忽略带有注释的特定嵌套属性

时间:2019-03-02 13:42:24

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

我正在使用杰克逊(带有弹簧靴)返回一些DTO,例如json。问题是我有特定的DTO,其中包含嵌套的对象,其中包含另一个对象。我是否可以直接从DTO忽略一些嵌套属性,而不必在嵌套对象上添加任何注释(因为它们已在其他DTO中使用)

services.Configure<JwtBearerOptions(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
options.BackchannelHttpHandler = new HttpClientHandler
{
UseProxy = true,
Proxy = new WebProxy
{
Address = new Uri("http://10.10.10.10:8080"),
BypassProxyOnLocal = true,
},
};
});

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

1 个答案:

答案 0 :(得分: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);