Jackson-Json Mapperを構成して、どのオブジェクトがシリアル化しているかに基づいてプロパティを除外することができますか?
質問
アドレスオブジェクトのリストを持つビジネスなどのオブジェクトや、ビジネスを持つ注文があるとします。
注文がシリアル化されたときに、ビジネスオブジェクトからアドレスのリストを除外し、ビジネスがシリアル化された場合、リストが含まれるように構成することは可能ですか?
私はAJAXを使用してRIAのデータをプルしています。注文を操作するときは、アドレスデータについてはあまり気にしませんが、ビジネスを扱うときはリストが必要です。
私はまた、持続性のために冬眠を使用しているので、これは本当に効率とパフォーマンスの最適化です。
解決
質問を正しく理解すれば、はい、 JSONビュー ジャクソンはこれを許可するでしょう。基本的に同じタイプで2つの異なるビュー(プロファイル)を作成し、シリアル化に使用するものを選択します。
他のヒント
使用できます Jsonignore Annotation を無視する 住所 シリアル化のリストと、の注釈の使用をオフにします ObjectMapper's SerializationConfig シリアル化a 仕事. 。もちろん、これはあなたが使用する他の注釈も無視されることを意味します。完璧ではありませんが、これを調べるより良い解決策を見つけるかもしれません。それが役立つことを願っています(明らかに)。
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().disable(Feature.USE_ANNOTATIONS);
はい、あなたはそれをすることができます。必要なのは、住所のリストをあなたのビジネスオブジェクトの一時的なプロパティとして宣言することです。
次に、次のコードをjsonconfigに追加します。
jsonConfig.setIgnoreTransientFields(true);
@JsonIgnore
JSONに変換したくないプロパティを無視するために使用されます。
public class UserDocument {
private long id;
private String documentUrl;
@JsonIgnore
private byte documentType;
//traditional getters and setters
}
出力:これにより、プロパティが変換されます ID と documenturl ただし、プロパティを変換しません ドキュメントタイプ.
{
"id": 5,
"document_url": "/0/301115124948.jpg"
}