既存の Spring MVC アプリケーションへの Spring Data REST の追加

Spring Boot を使用する場合、以下の手順は不要です。Boot アプリケーションの場合、spring-boot-starter-data-rest を追加すると、アプリケーションに Spring Data REST が自動的に追加されます。

Spring Data REST を既存の Spring MVC アプリケーションと統合できます。Spring MVC 構成 (ほとんどの場合、MVC リソースを構成する場所) で、RepositoryRestController の構成を担当する Java 構成クラスへの Bean 参照を追加します。クラス名は org.springframework.data.rest.webmvc.RepositoryRestMvcConfiguration です。次の例は、@Import アノテーションを使用して適切な参照を追加する方法を示しています。

構成は次のようになります。

Java
import org.springframework.context.annotation.Import;
import org.springframework.data.rest.webmvc.RepositoryRestMvcConfiguration;

@Configuration
@Import(RepositoryRestMvcConfiguration.class)
public class MyApplicationConfiguration {

  …
}
XML
<bean class="org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration"/>

ApplicationContext がこの Bean 定義に遭遇すると、必要な Spring MVC リソースをブートストラップして、その ApplicationContext および任意の親コンテキストで見つかったリポジトリをエクスポートするためのコントローラーを完全に構成します。

必要な構成の詳細

Spring Data REST は、既存の Spring MVC アプリケーション内で機能するために正しく構成する必要があるいくつかの Spring MVC リソースに依存しています。アプリケーション内にすでに存在する類似のリソースからそれらのリソースを分離しようとしましたが、これらの MVC コンポーネントを変更して、Spring Data REST の動作の一部をカスタマイズしたい場合があります。

次のセクションで説明する RepositoryRestHandlerMapping の構成には特に注意を払う必要があります。

RepositoryRestHandlerMapping

パスが Spring Data REST によって処理されることを意図している場合にのみ、RepositoryRestController にのみ応答するカスタム HandlerMapping インスタンスを登録します。アプリケーションによって処理されるパスを Spring Data REST によって処理されるパスと区別するために、このカスタム HandlerMapping クラスは URL パスをインスペクションし、リポジトリがその名前でエクスポートされているかどうかを確認します。存在する場合、カスタム HandlerMapping クラスはリクエストを Spring Data REST によって処理できるようにします。その名前でエクスポートされたリポジトリがない場合は、null を返します。これは、「他の HandlerMapping インスタンスがこのリクエストを処理できるようにする」ことを意味します。

Spring Data REST HandlerMapping は order=(Ordered.LOWEST_PRECEDENCE - 100) で構成されています。これは、通常、URL パスをマップするときに最初に並んでいることを意味します。既存のアプリケーションは、リポジトリを対象としたリクエストを処理する機会がありません。例: person という名前でエクスポートされたリポジトリがある場合、/person で始まるアプリケーションへのすべてのリクエストは Spring Data REST によって処理され、アプリケーションはそのリクエストを認識しません。ただし、リポジトリが別の名前 ( people など) でエクスポートされている場合、/people へのリクエストは Spring Data REST に送信され、/person へのリクエストはアプリケーションによって処理されます。