我希望能够跨 JVM 生成任何 Java POJO 的 MD5 校验和。该方法是将对象序列化为 JSON,然后对 JSON 进行 MD5。
问题是 Jackson 的 JSON 序列化不是确定性的,主要是因为许多集合不是确定性的。
ObjectMapper mapper = new ObjectMapper()
.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true)
.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
... // all other custom modules / features
;
Run Code Online (Sandbox Code Playgroud)
这两个功能解决了在 POJO 和 Map 上保持字段排序的两个问题。
下一个挑战是动态修改任何集合并对其进行排序。这要求每个集合中的每个元素都是可排序的,但我们假设现在可以。
有没有办法拦截每个集合并在序列化之前对其进行排序?