相关疑难解决方法(0)

杰克逊没有反序列化它已经序列化的通用列表

当使用Apache Jersey与Jackson进行JSON序列化(在服务器和客户端上)时,我在反序列化通用List时遇到了问题.

我生成的JSON如下,"data"中的所有3个类都实现了"CheckStatusDetail":

{
  "errorCode" : 0,
  "errorMessage" : null,
  "type" : "array",
  "data" : [ {
    "@class" : "com.rrr.base.status.module.dto.DiscoveryAgentCheckStatusDetail",
    "serverInfo" : {
      "@class" : "com.rrr.base.util.discovery.config.xml.XMLServerInfo",
      "name" : "java",
      "location" : "THEO",
      "description" : "sddgs",
      "group" : "java",
      "aliases" : [ "mercury" ]
    }
  }, {
    "@class" : "com.rrr.base.status.module.dto.MongoDBCheckStatusDetail",
    "addresses" : [ "localhost:27017" ],
    "version" : "2.5",
    "connected" : true
  }, {
    "@class" : "com.rrr.base.status.module.dto.NetworkCheckStatusDetail",
    "splitBrain" : false
  } ],
  "count" : 3,
  "status" : 0
}
Run Code Online (Sandbox Code Playgroud)

生成此JSON的对象看起来像这样,我在客户端使用相同的类:

public class …
Run Code Online (Sandbox Code Playgroud)

java serialization json jersey jackson

16
推荐指数
1
解决办法
2万
查看次数

Jackson Unmarshall 自定义对象而不是 LinkedHashMap

我有一个 Java 对象结果

public class MetaData {
    private List<AttributeValue<String,Object>> properties
    private String name
    ...

    ... getters/setters ...
}
Run Code Online (Sandbox Code Playgroud)

的AttributeValue类是通用的键值类。可能嵌套了不同的 AttributeValue。(value) Object将是另一个 AttributeValue 等等。

由于遗留原因,无法更改此对象的结构。

我有我的 JSON,我尝试将其映射到此对象。对于常规属性,一切顺利。此外,列表的第一级填充有 AttributeValues。

问题是Object。Jackson 不知道如何解释这种嵌套行为,只是将其设为 LinkedHashMap。

我正在寻找一种实现自定义行为的方法来告诉杰克逊这必须是一个 AttributeValue 对象而不是 LinkedHashMap。

这就是我目前转换 JSON 的方式:

ObjectMapper om = new ObjectMapper();
MetaData metaData = om.readValue(jsonString, new TypeReference<MetaData>(){});
Run Code Online (Sandbox Code Playgroud)

这是示例 JSON。(这是通过将现有 MetaData 对象序列化为 JSON 获得的,我可以完全控制此语法)。

{
    "properties":[
        {
            "attribute":"creators",
            "value":[
                {
                    "attribute":"creator",
                    "value":"user1"
                },{
                    "attribute":"creator",
                    "value":"user2"
                }
            ]
        },{
            "attribute":"type",
            "value": "question"
        }
    ], …
Run Code Online (Sandbox Code Playgroud)

java json jackson

7
推荐指数
1
解决办法
7759
查看次数

标签 统计

jackson ×2

java ×2

json ×2

jersey ×1

serialization ×1