固定セット・ソリューション:場合
はあなたが事前に定義された組み合わせのプロパティセットを持って、あなたは離れて注釈付き得ることができる(例えば、1つのユースケースのためにfield1
、field3
とfield20
を組み合わせて、別のユースケースのためfield4
とfield8
を返します。) POJOに複数の@JsonView
注釈が付いています(詳しい説明はhttp://www.baeldung.com/jackson-json-view-annotationを参照してください)。
必要なフィールドのセットに応じて、ユーザーが要求した「設定」に基づいて、コントローラで正しい表示を使用できます。
ダイナミックセットソリューション1: あなたが実際にリソースによって返されるフィールドの(事前に知られていない)任意のランダムな組み合わせをしたい場合は、JsonViewはそれをカットされません。
代わりに、カスタムBeanPropertyWriter
または要求されていないプロパティをスキップする(jsonGen.writeXXX
を呼び出さない)カスタムシリアライザを追加できます。ここでの難しさは、リクエストされたプロパティ(RESTコントローラに渡される)をSpringのJacksonメッセージコンバータによって呼び出されるwriter/serializerで知ることです。これがどのように機能するかは100%確信していませんが、同じPOJOを使用することができます。
ダイナミックセット・ソリューション2:
少し退屈:あなただけではなく、コントローラからPOJOを返すので、Map
にPOJOを変換するために、あなたのcommons-beanutils
を使用することができます。このようにして、POJOのフラットな表現ができます。次に、「要求されたフィールド」リストに含まれていないキーをマップから削除し、マップ(またはリスト/ページ)を返して、それにマジックをかけることができます。
これは、これは非常に抽出するオブジェクトのいずれかのタイプにも適用することができます...あなたは私が推測する高度なJSON *注釈を使用していない場合は、POJO自体によって生成されるのと同じJSONに
を発生しますベースのリソースや何かのこの振る舞いは、重い持ち上げを隠すことはありません。
'PagingAndSortingRepository'インスタンスを@RestControllerとして直接公開していますか、その間にレイヤーがありますか?@RestControllerまたは中間表現からエンティティ自体を返していますか? –
私はサービス(インターフェイス)とserviceImplを間に持っています。コントローラは、サービスimplを呼び出し、これが次にrepoを呼び出します。 – jscriptor
PagingAndSortingRepositoryは、コントローラに返されるページをサービスに返します。このページは完全なPojoのリストです – jscriptor