変数の名前を変更する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'フィールドが表示されません。
私は素早い単体テストを打ち、期待どおりの出力を得ました。「val」は「value」と書かれていました。シリアライゼーションのコードサンプルがありますか?注釈として、ゲッタとフィールドに注釈を付ける必要はありません。 – Leon
@Leonとして、私は再現できません。 – rbntd
誤った 'JsonProperty'アノテーションクラスをインポートした可能性があります。あるいは、' JsonProperty'アノテーションを気にしないJSONシリアライザを間違って使用している可能性があります。より多くのコード、特に 'Isbn'クラスのインポートとJSONシリアライザの設定を提供してください。 – Codo