我有两个对象要进行diff运算,为此我在spring-boot 2.1.3版中使用Jackson ObjectMapper
将它们反序列化为String,把它们当作一棵树来读(转换为JsonNode
),然后对它们进行diff运算以创建一个JsonPatch
对象。我注意到的是,在现有对象中's JsonNode跳过所有具有null
值的字段,因为对象只具有null
值字段。(spring-boot版本2.6.7)和服务提供者(spring-boot-2.1.3)。示例,在树中:
"_optionalAttrs":{"styles":{"99_0002_4_24_002":{"hineck":null,"choices":{"99_0002_4_24_002_001":{"color":null}}},"99_0002_4_24_001":{"hineck":null,"choices":null}}.
与
"_optionalAttrs":{"styles":{"99_0002_4_24_002":{"choices":{"99_0002_4_24_002_001":{}}},"99_0002_4_24_001":{}}
我猜这就是生成的JsonPatch操作不正确的原因:
op: copy; from: "/_optionalAttrs/styles/99_0002_4_24_001/hineck"; path: "/_optionalAttrs/clientAttributes/channel"
最后我得到这个错误-在目标JSON文档中没有这样的路径。有没有办法确保两者保持一致?如果您认为还有其他问题,请告诉我。消费者代码是我们可以更改的,但服务提供者代码不属于我们。我使用的是json-patch-1.12
和jdk 11
。
2条答案
按热度按时间x8diyxa71#
默认情况下,
ObjectMapper
将保留null
值,但您可以使用以下设置跳过它们:zbdgwd5y2#
我没有很好的解决方案,但总比什么都没有好。您可以使用 fieldAndValueMap 方法将对象Map到Map〈String,String〉,然后比较它们