2016-10-21 7 views
1

変数の名前を変更するJsonPropertyアノテーションが受け入れられない問題があります。ここでは例のアプリ https://github.com/derrylvarghese/problematicjson@JsonPropertyが機能しない(Weblogic 12.2.1およびJava 8)

私はとして表示するには「ISSN」オブジェクトの「val」を期待していJSON

String json = "{\"response\": {\"companyname\": \"ABC Company\",\"issn\": [{\"format\": \"paper\",\"val\": \"0018-9480\"},{\"format\": \"online\",\"val\": \"1557-9670\"}]},\"teststring\":\"testing me out\"}"; 

    ObjectMapper mapper = new ObjectMapper(); 
    WrapperObj record = mapper.readValue(json, WrapperObj.class); 
    ObjectWriter writer = mapper.writer(); 
    writer.writeValue(response.getOutputStream(), record); 

に戻ってそれを変換し、その後POJOに次のJSONに変換していますです'value'は 'val'フィールドに@JsonProperty( "value")が適用されているためです。 出力json(簡潔さのために編集されています)があります。

issn: [ 
      { 
      format: "Print ISSN", 
      val: "0018-9480" 
      } 
      ] 

iはISSNオブジェクトを作成しrecord.getResponse.setIssn(setMyObject)を実行した場合、JSON出力は、適切JsonPropertyタグを示しています。私は誰かが興味を持っている場合、これを示すサンプルプロジェクトにリンクしています。 (gitのリンク:https://github.com/derrylvarghese/problematicjson) は私が@JsonProperty("value")と私のPOJOフィールドを注釈付き以来のように思える

アップデートは、入ってくるJSONフィールドも「の値」と呼ばれるべきです。すべてこれはすべてのフィールドが行っていたすべてのListフィールドをキャッチしていたので、出力で 'val'が表示されていました。私はそのJsonAnyGetterフィールドを削除し、今は私の 'val'フィールドが表示されません。

+0

私は素早い単体テストを打ち、期待どおりの出力を得ました。「val」は「value」と書かれていました。シリアライゼーションのコードサンプルがありますか?注釈として、ゲッタとフィールドに注釈を付ける必要はありません。 – Leon

+0

@Leonとして、私は再現できません。 – rbntd

+0

誤った 'JsonProperty'アノテーションクラスをインポートした可能性があります。あるいは、' JsonProperty'アノテーションを気にしないJSONシリアライザを間違って使用している可能性があります。より多くのコード、特に 'Isbn'クラスのインポートとJSONシリアライザの設定を提供してください。 – Codo

答えて

0

OKそう明らかにいつか過去にジャクソンが1人のシリアライズの名前と直列化復元のために別のものをサポートしている場合があります。もうそれは見えません。 @JsonProperty( "value")でgetter(getVal())に注釈を付けると、setVal()メソッドがあるにもかかわらず、着信jsonペイロードにも "value"(および "val"

0

@Codo私のプロジェクトでは同じトラブルがあったが、Jaxsonリーダー/ライターの異なるプロバイダからの混合ライブラリはほとんどありませんでした これをチェックすると、あなたのバグを見つけることができます。

0

あなたのプロジェクトでジャクソンデータバインド依存/ jarファイルを追加したことを確認してください -

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.8.0</version> 
</dependency> 
+0

はい。私は持っています。 – user1187958

関連する問題