Java 如何在不使用包装器对象的情况下反序列化前面带有前导标签的数组?

Java 如何在不使用包装器对象的情况下反序列化前面带有前导标签的数组?,java,json,spring,jackson,deserialization,Java,Json,Spring,Jackson,Deserialization,我的web服务(WS)接收HTTP POST请求,JacksonJsonProvider正在将传入的body对象反序列化为JSON字符串。DTO很简单: public class SettingDTO { private String key; private String value; ... } WS签名如下所示: @Post Response saveList(List<SettingDTO> list); 这将导致一个异常Jackson不知道如何处理主要

我的web服务(WS)接收HTTP POST请求,JacksonJsonProvider正在将传入的body对象反序列化为JSON字符串。DTO很简单:

public class SettingDTO {
   private String key;
   private String value;
   ...
}
WS签名如下所示:

@Post
Response saveList(List<SettingDTO> list);
这将导致一个异常Jackson不知道如何处理主要的“设置”标签。如果我在没有标签的情况下尝试它,只使用一个普通数组,它会工作得很好。但要求是按原样使用它

我知道的一个解决方案是使用包装器对象,另一个DTO我想知道这是否可以在没有额外包装的情况下解决?也许一个注释就可以了


反序列化之后,我想以填充的
列表设置结束…

有几种方法可以实现这一点。但如果不想使用额外的包装类,一种方法是先读取内部JSON字符串,然后将其反序列化为
列表
,如下所示:

代码片段

ObjectMapper mapper = new ObjectMapper();      
JsonNode root = mapper.readTree(jsonStr);
String settingsStr = root.get("settings").toString();
List<SettingDTO> settings = mapper.readValue(settingsStr, new TypeReference<List<SettingDTO>>(){});
System.out.println(settings.toString());
ObjectMapper mapper=new ObjectMapper();
JsonNode root=mapper.readTree(jsonStr);
字符串设置str=root.get(“设置”).toString();
列表设置=mapper.readValue(setingsstr,newtypereference(){});
System.out.println(settings.toString());
控制台输出

ObjectMapper mapper = new ObjectMapper();      
JsonNode root = mapper.readTree(jsonStr);
String settingsStr = root.get("settings").toString();
List<SettingDTO> settings = mapper.readValue(settingsStr, new TypeReference<List<SettingDTO>>(){});
System.out.println(settings.toString());
[SettingDTO[key=key1,value=val1],SettingDTO[key=key2,value=val2]]


顺便说一句,如果您试图将
@JsonRootName(value=“settings”)
添加到类
SettingDTO
,那么它对JSON数组不起作用