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

2022-09-01 18:24:02

我正在尝试使用一个服务,该服务为我提供了一个实体,其中包含一个字段,该字段是一个数组。

{
  "id": "23233",
  "items": [
    {
      "name": "item 1"
    },
    {
      "name": "item 2"
    }
  ]
}

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

{
  "id": "43567",
  "items": {
      "name": "item only"
    }
}

在这种情况下,Jackson 无法转换为我的 Java 对象。

public class ResponseItem {

   private String id;
   private List<Item> items;

   //Getters and setters...
}

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


答案 1

你不是第一个提出这个问题的人。它看起来很旧。

看完这个问题后,你可以使用: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 功能添加到对象映射器中。

我希望它能帮助你。


答案 2

我认为注释更适合代码。

@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private List<Item> items;