Java Jackson将单个项反序列化到列表中

Java Jackson将单个项反序列化到列表中,java,json,jackson,Java,Json,Jackson,我试图使用一个服务,该服务为我提供了一个实体,其字段是数组 { "id": "23233", "items": [ { "name": "item 1" }, { "name": "item 2" } ] } 但是,当数组包含单个项时,将返回项本身,而不是返回一个元素的数组 { "id": "43567", "items": { "name": "item only" } } 在这种情况下,Jac

我试图使用一个服务,该服务为我提供了一个实体,其字段是数组

{
  "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...
}
公共类响应项{
私有字符串id;
私人清单项目;
//接球手和接球手。。。
}

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

可以使用自定义JsonDeserializer来解决这个问题

例如


在那之后它就会工作了。快乐编码:)

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

查看此问题后,您可以使用
反序列化功能。将\u SINGLE\u VALUE\u接受为\u ARRAY

查看文档:

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


我希望它能对您有所帮助。

我认为该膏更适合代码

@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private List<Item> items;
@JsonFormat(with=JsonFormat.Feature.ACCEPT_SINGLE_VALUE_作为_数组)
私人清单项目;

对于该服务来说,这似乎是相当奇怪的行为。有没有机会告诉提供商去解决这个问题?@Thomas不幸没有。这是一家拥有数百名用户的大型SaaS提供商,我只是其中之一。这很糟糕。无法处理可能需要单个值作为多个级别上的数组的深层结构。使用单独的映射器以默认方式反序列化整个列表分支。每个列表反序列化都会实例化其他映射器。如果此操作不起作用,并且您正在使用lombok:您必须将此字段设置为非
final
,并使用
@NoArgsContructor
。它不适用于
final
字段。
@JsonDeserialize(using = CustomDeserializer.class)
private List<Item> items;
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private List<Item> items;