无法从VALUE_STRING标记中反序列化java.util.ArrayList的实例

时间:2016-10-20 06:48:32

标签: java json arraylist jackson

我已经在堆栈溢出中寻找其他帖子,但它们都不适合我。这是一段代码:

 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

1 个答案:

答案 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);

将完美地反序列化。