【发布时间】:2017-11-06 19:31:34
【问题描述】:
我有一个 Comparable 类型的 Java java.util.Set,我想按升序将其序列化为 JSON 数组。
有一个对象映射器功能可以序列化按映射键排序的映射,但没有关于 java 集合的任何说明。如果我将项目存储在 POJO 中的 java.util.Set 中,Jackson ObjectMapper 会以任何顺序将它们序列化为 JSON 数组吗?
如果没有,我正在考虑为此目的为该集合编写一个自定义序列化程序 - 有人可以建议更好的方法吗?
最终,目标是将唯一整数数组反序列化到“请求”pojo 中的某种容器中。然后处理请求并将该输入字段传递到“响应”对象中的相应输出字段(未更改)。
我想将 POJO 中的数据存储为 java.util.Set<Integer> 只是为了让所有用户满意(如果您尝试将其存储为 Set 的子类型,那么 POJO 界面的消费者可能会因为他们不能只获得Set,而必须期待HashSet 或TreeSet)。
这行得通吗?
- JSON 数组
[5,4,3,2,1]被反序列化为Set<Integer>但是,我在setter 方法上使用@JsonDeserialize(as=TreeSet.class)。所以对象的运行时类型现在是TreeSet(即使它在 POJO 中存储为Set)。 -
Set通过服务器传递并最终存储在响应 POJO 中(运行时类型仍为TreeSet,即使 POJO 字段类型为 Set)。 -
ObjectMapper将TreeSet序列化为 JSON 数组[1,2,3,4,5](因为TreeSet是自然排序的)。
上面的第 3 项是我想知道的——ObjectMapper 会使用 POJO 字段的运行时类型还是声明的类型?
如何确保我的Set 按排序顺序转换为 JSON 数组?
【问题讨论】:
-
也许这对你有帮助? stackoverflow.com/questions/19272830/…
-
感谢@user - 那篇文章是关于属性顺序序列化的。我的问题是关于设置内容顺序序列化。
标签: java json serialization jackson set