【问题标题】:not able to get values from Map - getting values as object reference无法从 Map 获取值 - 获取值作为对象引用
【发布时间】: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&lt;String, Object&gt; additionalInfo,但您应该将值设置为:additionalInfo.put("createdDate", "Jul 05, 2019 05:10:51 PM") 而不是 additionalInfo.put("createdDate", new Object())Java 中的每个对象都扩展了 java.lang.Object 并且在运行时你应该看到它真正的类值。

标签: java java-8 jackson


【解决方案1】:

更新 GSON 库解决了这个问题。 从 1.7.1 更新到 2.8.2 解决了我的问题。

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2015-02-13
    • 2015-08-14
    相关资源
    最近更新 更多