2017-08-15 8 views
2

私はこの基本的な形式を以下のJSON文字列を作成する必要がありJackson ObjectMapperでシリアライズされます。JsonAnyGetter/JsonAnySetter得JSONが倍増した値

@Data 
public class Angebot { 

    private String instanzId; 

    private List<BuchungsKontext> buchungsKontextList; 

    private Map<String, Object> payload = new HashMap<String, Object>(); 

    @JsonAnyGetter 
    public Map<String, Object> any() { 
     return payload; 
    } 

    @JsonAnySetter 
    public void set(String name, Object value) { 
     payload.put(name, value); 
    } 
} 

-であるように私は、このクラスのインスタンスをシリアル化した場合、結果のJSONは、このようなものになります。それは自分だとしてあなたは「ペイロード」のデータを見ることができるように

"gesamtAngebot":{ 
    "angebotList":[{ 
     "instanzId":"string", 
     "buchungsKontextList":[{ 
      "quellSystem":"SOMETHING", 
      "payload":{} 
     }], 
     "payload":{"test1":"test1"}, 
     "test1":"test1" 
    }] 
} 

が倍増しています理由は分かりません。

ご迷惑をおかけして申し訳ありません。

答えて

0

​​を法線マップとしてシリアル化したいようです。だから、2度そこにいなければ、any()メソッドを持ってはいけません。ちょうど​​の通常のゲッターメソッドがあります。

クラスのプロパティのように、​​マップからすべてのアイテムをシリアル化する場合は、any()メソッドを使用できます。次にanyメソッドを使用し、​​のゲッターは使用しません。

あなたのJSONは次のように出てくるでしょう:

"gesamtAngebot":{ 
    "angebotList":[{ 
     "instanzId":"string", 
     "buchungsKontextList":[{ 
      "quellSystem":"SOMETHING", 
      "payload":{} 
     }], 
     "test1":"test1" 
    }] 
} 

そしてtest1Angebotクラスの変数であるようにそれが見えます。

+0

あなたの提案に感謝しますが、実際に私は関心がなく、JSONペイロードにあるすべての要素の匿名コンテナとして「ペイロード」を使用したいと考えています(テストistはただ1つの要素です彼らのもっと多くのものになる)。だから、私はanygetter/-setterを使用している。最初のjsonファイルのように見えるはずです。 – Gremi

+0

@Gremi私が言ったように 'any()'メソッドを削除して、正しいJSONを持っているはずです – tima

+1

ありがとう@tima、これはうまくいきました!場合によっては、docuも読むべきです。 – Gremi

0

any()ゲッターのためです。ちょうどそれを削除します。

@Data 
public class Angebot { 

    private String instanzId; 

    private List<BuchungsKontext> buchungsKontextList; 

    private Map<String, Object> payload = new HashMap<String, Object>(); 

// @JsonAnyGetter 
// public Map<String, Object> any() { 
//  return payload; 
// } 

    @JsonAnySetter 
    public void set(String name, Object value) { 
     payload.put(name, value); 
    } 
} 

​​は、クラスのプロパティです。 @Data注釈のために、デシリアライズされます。 any()ゲッターは二重性を作成します。

+0

働いて、ありがとう! – Gremi

+0

偉大な、私は幸せです:)。ところで、スタックオーバーフローへようこそ。 –

+0

答えが正しいと思われる場合は、それを受け入れられたものとしてマークすることができます。それはまた、他の人の助けを大事にしているあなたの良い兆候です。人々は次回にあなたを助ける気になるでしょう。また、あなたと私はいくつかの評判のポイントを受け取ります。 –

関連する問題