2016-07-07 16 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のインスタンスをデシリアライズすることはできません

トークンfasterxml.jacksonバージョン2.2.3

をVALUE_STRINGのあなたは、私が問題を解決することができますどのように私を助けてくださいもらえますか?

+1

なぜ「listField」:[] 'ではなくJSONフィールド「listField」:「[]」'がありますか? – khelwood

+0

@khelwood、それはサーバーの応答です。それは間違ったjsonですか? – electronCoder

+1

'[]'はJSONの空の配列です。 '' []」は2つの括弧を含む文字列です。それが配列であると期待していたのは間違いです。 – khelwood

答えて

0

カスタムデシリアライザに加えて、新しいセッタを追加して古いものを無視することもできます。それはわたしを助ける。

@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; 
} 
関連する問題