2016-07-07 74 views
0

我有一个List<BigInteger> listField类。该字段的JSON部分看起来像"listField":"[]"。我用下面这段代码反序列化:反序列化“[]”json为空列表

ObjectMapper mapper = new ObjectMapper(); 
MyClass myClass = mapper.readValue(jsonAsString, MyClass.class); 

但会抛出异常:

com.fasterxml.jackson.databind.JsonMappingException:无法反序列化的java.util.ArrayList实例出来VALUE_STRING令牌

fasterxml.jackson版本2.2.3

你能帮助我,请我该如何解决这个问题?

+1

为什么JSON字段“”listField“:”[]“'而不是'”listField“:[]'? – khelwood

+0

@ khelwood,它是服务器的回应。 json错了吗? – electronCoder

+1

'[]'是JSON中的一个空数组。 '“[]”'是一个包含两个括号的字符串。如果你期待它是一个数组,那是错误的。 – khelwood

回答

0

除了自定义解串器,还可以添加新的setter并忽略旧的。它帮助到我。

@JsonProperty("listField") 
public void setListFieldAsString(String listFieldAsString) { 
    List<BigInteger> listFieldAsList = new ArrayList<BigInteger>(); 

    try { 
     ObjectMapper objectMapper = new ObjectMapper(); 
     listFieldAsList = objectMapper.readValue(listFieldAsString, new TypeReference<List<BigInteger>>() {}); 
    } catch (IOException e) { 
     System.out.println("Error was detected!"); 
    } 
    setListField(listFieldAsList); 
} 

@JsonIgnore 
public void setListField(List<BigInteger> listField) { 
    this.listField = listField; 
}