当前位置: 首页 > 知识库问答 >
问题:

如何强制Jackson对象映射器忽略非全字段readerForUpdate(). readValue方法

晋骏喆
2023-03-14

我有一个类(省略了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注释,所以我需要以某种方式更改映射器的配置。有办法吗?


共有1个答案

龙令雪
2023-03-14

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类: 或者类似的东西,以便我可以接收基本架构并对其进行处理,然后将其发送到相关类,该类将转换为适当的预期类? 问题答案: 使用 您可以从