杰克逊将单个项目反序列化为列表

Jav*_*rez 8 java json jackson

我正在尝试使用一个服务,它为我提供了一个具有字段的实体,它是一个数组.

{
  "id": "23233",
  "items": [
    {
      "name": "item 1"
    },
    {
      "name": "item 2"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

但是当数组包含单个项时,将返回项本身,而不是一个元素的数组.

{
  "id": "43567",
  "items": {
      "name": "item only"
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,杰克逊无法转换为我的Java对象.

public class ResponseItem {

   private String id;
   private List<Item> items;

   //Getters and setters...
}
Run Code Online (Sandbox Code Playgroud)

有一个简单的解决方案吗?

Tho*_*ous 19

你并不是第一个提出这个问题的人.看起来很古老.

看完这个问题后,你可以使用DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY:

查看文档:http: //fasterxml.github.io/jackson-databind/javadoc/2.5/com/fasterxml/jackson/databind/DeserializationFeature.html#ACCEPT_SINGLE_VALUE_AS_ARRAY

您需要将此jackson功能添加到对象映射器.

我希望它会对你有所帮助.


Hig*_*ian 10

我认为注释更适合代码。

@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private List<Item> items;
Run Code Online (Sandbox Code Playgroud)