2016-10-20 17 views
1

他のポストがスタックオーバーフローで検索されましたが、どれも私のために機能しません。ここではコードの一部は次のとおりです。VALUE_STRINGトークンからjava.util.ArrayListのインスタンスを逆シリアル化できません。

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

私はリストFREQを削除し、FREQの文字列に変更すると、それはしかし作品私のJSONは1つ以上の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 

答えて

2

DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAYは、List<String> freqという値の"freq":"78000000"フラグメントをデシリアライズするために正常に動作します。

しかし、あなたのjsonには、forwardの明示的な配列が含まれています。完全にそれをデシリアライズします

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

では:この全体jsonをデシリアライズするためにあなたが言う、ラッパークラスのいくつかの種類を持っている必要があります。

+0

私は、コードを持つPlanListとしてクラスを持っています:public class PlanList implements implements Serializable { privateリスト; // getter // setter}をjsonString = mapper.writeValueAsString(結果)に設定します。結果はPlanListオブジェクトだけです。 – Harleen

関連する問題