当前位置: 首页 > 知识库问答 >
问题:

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

盖博简
2023-03-14
 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;
 }
}
{"forward":[{"freq":"78000000"}]}

我的映射器是:

ObjectMapper mapper = new ObjectMapper();            
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
String jsonString = mapper.writeValueAsString(result);

如果我删除列表freq并改为字符串freq,它可以工作,但我的JSON可以包含一个或多个freq,所以我需要创建一个列表。我得到的异常如下:

  Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream

共有1个答案

殷德本
2023-03-14

deserializationfeature.accept_single_value_as_array可以很好地将“freq”:“78000000”片段反序列化为列表 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);
 类似资料: