既存の 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
アノテーションを使用して適切な参照を追加する方法を示しています。
構成は次のようになります。
import org.springframework.context.annotation.Import;
import org.springframework.data.rest.webmvc.RepositoryRestMvcConfiguration;
@Configuration
@Import(RepositoryRestMvcConfiguration.class)
public class MyApplicationConfiguration {
…
}
<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
へのリクエストはアプリケーションによって処理されます。