我有一个类(省略了Jackson注释/getters/setters/etc):
public class Sample {
public String name;
public Integer value;
}
我有一个实例,例如:
示例示例=新示例(“一”,空)
,
我有一个json字符串:
{“name”=“two”,“value”=3}
我用json更新对象:
ObjectMapper mapper = new ObjectMapper();
mapper.readerForUpdating(sample).readValue(json);
更新后我的对象如下所示:
[Sample: name = "two", value = 3]
但是我不需要覆盖not null字段,因为名称是这样的,所以更新后的对象如下所示:
[Sample: name = "one", value = 3]
不幸的是,我无法编辑我的类和Jackson注释,所以我需要以某种方式更改映射器的配置。有办法吗?
readerforupdate
方法背后的思想不是创建对象的新实例,而是将传递的对象的值替换到对象中进行更新。
我也有同样的问题,想只替换不为空的值,但要做到这一点,我需要隔离ObjectMapper并将其配置为不传输空值,这与readerForUpdate
方法相结合做我们想要的:
public static void updateModels(Object original,Object data) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
try {
objectMapper.readerForUpdating(original).readValue(objectMapper.writeValueAsBytes(data));
} catch (IOException e) {
e.printStackTrace();
}
}
问题内容: 我有一个JSON对象,例如: 要么 要么 等等 我正在尝试将上述JSON映射到: 上面的映射工作正常,但是将来会有更多的“ Grade”类型让我们说D,E等,这会破坏现有的映射并引发以下异常 有没有办法忽略带有枚举类型的未知字段? 谢谢 问题答案: 我认为您应该为枚举定义外部解串器。 我在枚举中添加了其他字段-未知: 现在,解析器可能看起来像这样: 用法示例: 输出: 如果您不想添加其
我将 Jackson 2.7.5 与 Jersey 2.25.1 配合使用。我正在尝试修复现有的生产代码,当它在JSON输入中获得意外字段时,它现在因“无法识别的PropertyException:无法识别的字段”而失败。 在研究这个问题时,我发现了几篇旧帖子(5年),建议各种修复方法与我当前的代码非常不同。我不太关注这些,因为它们是针对旧版本的Jackson/Jersey。最近的建议,包括泽西岛
问题内容: 我正在使用Jackson JSON库将一些JSON对象转换为android应用程序上的POJO类。问题是,JSON对象可能会更改,并且在发布应用程序时会添加新字段,但是即使添加简单的String字段(即使可以安全地忽略),当前它也会中断。 有什么办法告诉杰克逊忽略新添加的字段?(例如,在POJO对象上不存在)?全局忽略将是巨大的。 问题答案: Jackson提供了可以在类级别使用的注释
我有一个问题。 然后在第二类中,即使我没有使用第二个字段,它仍然被添加为NULL。 我怎样才能避免这种情况呢?
我使用@JsonTypeInfo和@JsonSubTypes来映射基于给定属性的解析子类。下面是我想要解析的示例JSON的一个人为示例。 用这个作为课堂 但是,当JSON包含我想要忽略的类型时,就会出现问题。例如,如果我有一个新类型的“猪”,我真的不想反序列化为对象: 并尝试解析它,它会给我这个错误: 无法将类型id猪解析为[简单类型,类动物]的子类型 我如何修复它,这样我就可以只绘制那些“狗”和
问题内容: 我在以下架构中具有json对象: 在这里,该字段包含一个嵌入的json对象,并且该对象的模式是动态的,并且每次都不同。 的对象是不同的API服务,以及不同的API服务的不同方法获得的原始输出。不可能将其映射到所有可能的值。 是否可能有如下所示的java类: 或者类似的东西,以便我可以接收基本架构并对其进行处理,然后将其发送到相关类,该类将转换为适当的预期类? 问题答案: 使用 您可以从