2016-07-28 1 views
3

私のJSON文字列は、マップ値は、提出されている間、私は問題に直面しています
ジャクソンマッパーを使用して

{ 
    "FieldInfo":{ 
     "Field1":{ 
     "FieldName":"test1", 
     "Values":"" 
     }, 
     "Field2":{ 
     "FieldName":"test2", 
     "Values":{ 
      "test":"5", 
      "test1":"2" 
     } 
     } 
    } 
} 

です。私のjson文字列では、値は空文字列かマップのいずれかになります。私は後述の変数に値フィールドをマッピングしています。 map.itが例外を与えると

@JsonProperty("Values") 
private Map<String, String> values; 

だから私の問題は、私はすでに@JsonInclude(Include.NON_NULL)を使用している

com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate 
value of type [map type; class java.util.LinkedHashMap, [simple type, class 
java.lang.String] -> [simple type, class java.lang.String]] from String 
value; no single-String constructor/factory method (through reference 
chain: com.test.model.ExtraInformation["FieldInfo"]->com.test.model.FieldInfo["Values"]) 

、空の文字列をマッピングしています。しかしそれは働かない。

+1

あなたは、文字列からすなわちの代わりに、 '「値」マップを初期化することはできません...

public void setValues(Object values) { if(values instanceof String){ this.values = null; }else{ this.values = (Map<String, String>) values; } } 

希望が...それはするのに役立ちます...怒鳴るよう..それをチェックします: ""それは "値":{} 'でなければなりません。 – Thomas

+0

私はjson形式を変更することはできませんので、サードパーティのAPIからjsonを取得しています。 –

答えて

1

値が空の文字列の場合、StringとMapをマップしようとしているようです。

@JsonProperty("Values") 
private Map<String, String> values; 

ジャクソンは値をマッピングするためにセッターメソッドを使用します。この設定はJacksonによって検出され、プロパティがJSONから読み込まれるときに使用されます。したがって、あなたのセッターの中で、あなたのフィールドがマップか空文字列かをチェックすることができます。 これはObjectを受け入れることができます。そして

+0

Ohooありがとうございました!その仕事.... –

関連する問題