【发布时间】:2018-01-12 09:36:42
【问题描述】:
使用 Jackson 将 Java 对象转换为 JSON
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
jsonMessage = mapper.writeValueAsString(object);
结果是字段“参与者”(它是对象实例的一部分)
participants Arrays$ArrayList<E>
重命名为“participantsList”
participantsList":[{"userId":"c1f9c"}]
即“列表”附加到字段名称。我浏览了杰克逊的文档,但还没有找到防止这种情况发生的方法。这可能吗?在独立项目中测试上述代码不会导致相同的结果(即不发生重命名)。为什么杰克逊会有这样的行为?不幸的是,该对象是第三方的,我无法更改它。
使用 Jackson 2.3.3 版(与 2.9.0 验证的行为相同)。
【问题讨论】:
-
什么是消息对象?
-
作为 writeValueAsString() 的参数传递的实例。它是一个第三方对象,所以不能在那里做太多事情。
-
如果它是第三方对象,那么您应该创建一个您控制的模型以进行序列化。然后您将转换第三方对象并序列化为 JSON。这样您就可以根据自己的意愿注释所有属性。
-
你能验证一下吗,可能有一个对应的getter叫做
getParticipantsList()? -
@OleksandrShpota 已经发现了问题。还有一个问题讨论如何使用基于字段而不是方法的杰克逊序列化:stackoverflow.com/questions/10240372/…
标签: java json jackson objectmapper