Jackson序列化生成 json 不同场景下忽略字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jackson序列化生成 json 不同场景下忽略字段相关的知识,希望对你有一定的参考价值。
参考技术A 有的时候有这个的需求,接口返回给业务的时候需要输出全部字段,但是有的场景比如打日志的时候需要忽略某些字段,比如密码。Jackson有忽略字段注解,@JsonIgnore 和 @JsonIgnoreProperties,但是这两个注解都是全局性的。
使用Jackson的AnnotationIntrospector实现通过自定义注解忽略属性。
在使用 Jackson 反序列化期间选择性地忽略 JSON 属性
【中文标题】在使用 Jackson 反序列化期间选择性地忽略 JSON 属性【英文标题】:Selectively ignoring JSON properties during deserialize with Jackson 【发布时间】:2014-06-13 19:01:52 【问题描述】:我想在反序列化阶段选择性地忽略 JSON 属性。我目前正在处理一个巨大的 JSON 文件,该文件需要很长时间才能在慢速 Android 设备上反序列化,我想指定一些在应用程序生命周期的不同阶段不反序列化的属性。问题是,有时我需要数据,并且需要能够在我真正需要的时候反序列化被忽略的数据。
我正在使用 Jackson 和 ObjectMapper。
示例 POJO:
public class Pojo
private String name;
private Map<String, String> data;
...
示例 JSON:
"pojos" : [
name : "Name",
data :
"somedata1" : "somevalue1",
"somedata2" : "somevalue2",
"somedata3" : "somevalue3"
...
]
会有大量的“pojo”,每个“数据”属性都会变得巨大。所以我有时想通过忽略“数据”属性来反序列化。有时我希望“数据”能够正常反序列化。
【问题讨论】:
我们需要做的远不止这些。代码在哪里?你在使用 ObjectMapper 吗?你有一节课吗?几门课?你是手动反序列化的吗?规则是什么?数据结构是什么?一种方法是让不同的类具有不同的 JsonIgnoreProperties 注释,但没有任何信息不能说。 我也在考虑不同的类方法,但这意味着我需要更改我的服务接口,因为它依赖于序列化类类型。我用示例代码和 JSON 编辑了问题。 所以你所有的数据总是一个字符串映射?在这种情况下,您无能为力。 @Antionio 通过使用不同的类,您可以创建一个与服务接口中的类相匹配的超类,然后创建 2 个或更多子类......所以希望服务中不应更改任何内容 @AngeloImmedia 你的方法似乎是有效的,所以如果你要创建一个官方答案,我会接受它。 【参考方案1】:通过使用不同的类,您可以创建一个与服务接口中的类相匹配的超类,然后创建 2 个或更多子类...所以希望服务中不应更改任何内容
【讨论】:
以上是关于Jackson序列化生成 json 不同场景下忽略字段的主要内容,如果未能解决你的问题,请参考以下文章
在使用 Jackson 反序列化期间选择性地忽略 JSON 属性
如何在没有jackson注释的情况下忽略反序列化的某些字段?
在 Java 中的 Jackson JSON 反序列化期间忽略丢失的属性
如何忽略像“car”这样的空 json 对象:,这会在使用 jackson 反序列化后导致空 pojos
jackson 序列化忽略未知字段: How to Ignore Unknown Properties While Parsing JSON in Java