杰克逊:忽略@JsonIgnoreProperties 注释
Jackson: ignore the @JsonIgnoreProperties annotation
我有一个要序列化的 class,我在 class 级别使用 @JsonIgnoreProperties
从中排除一些字段。
最近我有一个需要序列化这些字段的用例。
有没有办法让 writer/reader 忽略注释?
我正在调查 @JsonView
,但似乎 @JsonIgnoreProperties
优先于它。
@JsonFilter 在这种情况下可以为您提供帮助。
通过定义自定义 json 过滤器,Jackson 将动态解析给定 class 使用的过滤器,动态地允许每次调用重新配置过滤。
您可以找到详细的解释和用法示例here
您找到的一些关于动态无视的有用信息here
我想出了一个解决方案,不知道它是否是最好的,但完成了工作...
我最终使用了@JsonView。
所以我有 2 个这样的观点:
public class Views {
public static class Public { }
public static class Extended extends Public { }
}
并且默认 Spring 映射器配置为
mapper.setConfig(mapper.getSerializationConfig().withView(Views.Public.class));
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
而 class 看起来像
public class Foo{
String name;
@JsonView(Views.Extended.class)
String title;
...}
通过在对象映射器上设置默认视图,它会导致它忽略所有其他未指定的视图。没有注释的字段将始终按照配置进行序列化。
然后,当我需要对整个 class 进行序列化时,我使用:
objectMapper.writer().withView(Views.Extended.class).writeValueAsString(value);
我有一个要序列化的 class,我在 class 级别使用 @JsonIgnoreProperties
从中排除一些字段。
最近我有一个需要序列化这些字段的用例。
有没有办法让 writer/reader 忽略注释?
我正在调查 @JsonView
,但似乎 @JsonIgnoreProperties
优先于它。
@JsonFilter 在这种情况下可以为您提供帮助。
通过定义自定义 json 过滤器,Jackson 将动态解析给定 class 使用的过滤器,动态地允许每次调用重新配置过滤。
您可以找到详细的解释和用法示例here
您找到的一些关于动态无视的有用信息here
我想出了一个解决方案,不知道它是否是最好的,但完成了工作...
我最终使用了@JsonView。
所以我有 2 个这样的观点:
public class Views {
public static class Public { }
public static class Extended extends Public { }
}
并且默认 Spring 映射器配置为
mapper.setConfig(mapper.getSerializationConfig().withView(Views.Public.class));
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
而 class 看起来像
public class Foo{
String name;
@JsonView(Views.Extended.class)
String title;
...}
通过在对象映射器上设置默认视图,它会导致它忽略所有其他未指定的视图。没有注释的字段将始终按照配置进行序列化。
然后,当我需要对整个 class 进行序列化时,我使用:
objectMapper.writer().withView(Views.Extended.class).writeValueAsString(value);