Jackson 2を使用して、各ケースを処理するためにJsonSerializer / JsonDeserializerを繰り返し作成することなく、オブジェクトを単一の値としてシリアル化する(その後、後でその単一のフィールドのみにデータを入力する)一般的な方法を探しています。@JsonIdentityInfoアノテーションはかなり近くにありますが、私が知る限り、最初の出現時に常に完全な子オブジェクトをシリアル化するため、マークが少し欠落しています。
これが私がやりたいことの例です。クラスを考えると:
class Customer {
Long id = 99;
String name = "Joe";
// Lots more properties
}
class Order {
String orderNum = "11111"
@WhateverAnnotationsINeedHereToDoWhatIWant
Customer customer;
}
Orderをどちらかとしてシリアル化したいと思います(どちらも私には完全に受け入れられます):
{"orderNum":"11111", "customer":"99"}
{"orderNum":"11111", "customer":{"id":99}}
@JsonIdentityInfoが行うことにより、クライアント側での処理がより困難になります(クライアントは、顧客IDを完全な顧客情報にマップする方法を知っていると想定できます)。
@JsonIgnorePropertiesは、表示されている2番目のJSONにもかなり近づく可能性がありますが、必要なもの以外はすべてオプトアウトする必要があることを意味します。
デシリアライズバックするときは、顧客を「id」フィールドのみで初期化する必要があります。
ジャクソンのスープのような内部に入ることなく私が逃しているこれを行うための魔法の方法はありますか?私の知る限り、JsonDeserializer / JsonSerializerには親に関するコンテキスト情報がないため、@ JsonValueFromProperty( "id")タイプのJackson Mix-inを作成して、そのアノテーションを確認する簡単な方法はないようです。カスタムシリアライザー/デシリアライザー。
任意のアイデアをいただければ幸いです。ありがとう!