【发布时间】:2020-11-03 15:57:25
【问题描述】:
我有一个包含 json 值的 Map
JSON:
{
"createdDate": "Jul 05, 2019 05:10:51 PM",
"createdUserId": 16,
"lastModifiedDate": "Jul 10, 2019 11:48:58 AM",
"lastModifiedUserId": 16,
"value": "Mahindra",
"key": "oemName"
}
无法将其写为 JSON 字符串。 其中的值包含对象引用而不是下面的值 -
{createdDate=java.lang.Object@1682b904, createdUserId=java.lang.Object@3cd68604, lastModifiedDate=java.lang.Object@5d8c47e2, lastModifiedUserId=java.lang.Object@42d07479, value=java.lang.Object@4119bfbe, key=java.lang.Object@4977f73f}
当尝试写为 JSON -
Map<String, Object> additionalInfo;
private final ObjectMapper objectMapper = new ObjectMapper().setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
objectMapper.writeValueAsString(additionalInfo);
获取异常-
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 没有找到类 java.lang.Object 的序列化程序,也没有发现创建 BeanSerializer 的属性(为避免异常,禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链:java.util .LinkedHashMap["createdDate"])
【问题讨论】:
-
我认为您的问题在于创建地图的代码,而不是尝试输出地图的代码。看起来地图是使用
java.lang.Object值而不是字符串值创建的。 -
我通过 POJO 接收值,它作为变量作为 - private Map
additionalInfo;并转换为 JAVA pojo。 -
java.lang.Object只是一个空对象。您可以将 map 声明为Map<String, Object> additionalInfo,但您应该将值设置为:additionalInfo.put("createdDate", "Jul 05, 2019 05:10:51 PM")而不是additionalInfo.put("createdDate", new Object())。Java中的每个对象都扩展了java.lang.Object并且在运行时你应该看到它真正的类值。