17

標準のSpringデータJPAとSpringデータRestのセットアップがあり、関連付けを正しいリソースへのリンクとして正しく返します。

{
    "id": 1,
    "version": 2,
    "date": "2011-11-22",
    "description": "XPTO",
    "_links": {
        "self": {
            "href": "http://localhost:8000/api/domain/1"
        },
        "otherDomain": {
            "href": "http://localhost:8000/api/domain/1/otherDomain"
        }
    }
}   

ただし、一部のリクエストでは、「otherDomain」への関連付けを展開したいと考えています(したがって、クライアントは完全なデータを取得するために N+1 リクエストを実行する必要はありません)。

この方法で応答を処理するように Spring Data Rest を構成することは可能ですか?

4

2 に答える 2

27

デフォルトの応答は、PUT要求のペイロードが返されるものと対称であることを確認するために、同じままにする必要がありますGET。ただし、Spring Data REST は、次のように機能するプロジェクション (詳細についてはJIRA チケットを参照) と呼ばれる機能を導入します。

専用のインターフェイスを作成し、応答に含めるすべてのプロパティを追加します。

public interface MyProjection {

  String getMyProperty();

  MyRelatedObject getOtherDomain();
}

次のいずれかを実行できます

  • を使用してインターフェースに注釈を付け、@Projectionドメインタイプまたはそのサブパッケージとまったく同じパッケージに配置します
  • または、 を使用してプロジェクションを手動で登録し、手動でRepositoryRestConfiguration呼び出しますprojectionConfiguration().addProjection(…)( を拡張RepositoryRestMvcConfigurationしてオーバーライドすることによりconfigureRepositoryRestConfiguration(…))。

これにより、ドメイン タイプ用に公開されたリソースが、プロジェクションの名前を持つprojectionパラメーター (名前も構成可能)を受け入れるようになります。ProjectionConfiguration指定された場合、デフォルトのレンダリング (関連するエンティティを埋め込む代わりにリンクをレンダリングすることを含む) をスキップし、Jackson に指定されたインターフェースをサポートするプロキシをレンダリングさせます。

その例は、Spring RESTBucksプロジェクトにもあります。OrderProjectionインターフェイスの定義については、 を参照してください。

于 2014-04-14T19:34:36.097 に答える