我已经在堆栈溢出中寻找其他帖子,但它们都不适合我。这是一段代码:
public class Forward implements Serializable {
private List<String> freq;
public List<String> getFreq() {
System.out.println("Print Freq::: --> " + freq);
return freq;
}
public void setFreq(List<String> freq) {
this.freq = freq;
}
}
JSON字符串是:
{"forward":[{"freq":"78000000"}]}
我的映射器是:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
String jsonString = mapper.writeValueAsString(result);
如果我删除List freq并更改为String freq它可以工作,但我的JSON可以包含一个或多个freq,所以我需要创建一个List.I得到异常,因为:
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream
答案 0 :(得分:2)
DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
可以正常工作,以便将"freq":"78000000"
片段反序列化为List<String> freq
列表的值。
但您还有另一个问题:您的json
包含forward
的显式数组。为了反序列化整个json
,你需要有一些包装类,比如说:
public class ForwardWrapper {
private List<Forward> forward;
public List<Forward> getForward() {
return forward;
}
public void setForward(List<Forward> forward) {
this.forward = forward;
}
}
在这种情况下
ForwardWrapper fw = mapper.readValue("{\"forward\":[{\"freq\":\"78000000\"}]}", ForwardWrapper.class);
将完美地反序列化。