現在、Spring Boot、Hibernate、Spring-HATEOASを使用して、RESTインターフェイスを備えたアプリケーションを構築しています。データモデルは@Entity
アノテーション付きのBeanとして定義されており、Springの機能を使用して自動的にセットアップしていますHibernateリポジトリ(PagingAndSortingRepository
を拡張するインターフェイスの作成)。私のアプリケーションは完全にアノテーション駆動型です。つまり、web.xml
はありませんが、@Configuration
、@Bean
などのSpringアノテーションですべてを構成し、アプリケーションを自分から起動します。 SpringApplication.run(MyApp.class, args);
の助けを借りたmain
メソッド
これは正常に機能しますが、このアプローチでは、RepositoryRestHandlerMapping
とEndpointHandlerMapping
が作成されます。これらは、私が必要も望まないリソースの束を作成します。標準のロジック以上のことを行う必要があるため、独自のコントローラーを実装します。
このデフォルトの動作を防ぎ、これらのマッピングを無効にするにはどうすればよいですか?
_@RestController
_アノテーションのような他のREST関数が必要です。しかし、今、自分で実行可能な解決策を見つけました。
RepositoryRestHandlerMapping
を無効にしないでください。ただし、リポジトリに@RepositoryRestResource(exported = false)
の注釈を付けることで、リポジトリのエクスポートを無効にすることができます。すべてのリポジトリでこれを実行しましたが、ワイルドカードリソースはまだインストールされていますが、それらを解決するためのリポジトリが登録されていないため、事実上消滅しています。このようなリソースにアクセスしようとすると、期待どおりに_404
_が得られます。
EndpointHandlerMapping
についても同じです。これは、_spring-boot-actuator
_から取得され、_/info
_、_/metrics
_などのエンドポイントをインストールします。これは便利であり、RESTアプリケーション;アプリケーションをEurekaサーバーに登録すると、これらの一部へのリンクが自動的に生成されます。これを正しく使用するには、たとえば、エンドポイントを_@Bean
_で次のように構成できます。
_@Configuration
public class InfoConfiguration {
@Bean
public InfoEndpoint infoEndpoint {
Map<String, Object> info = ...
return new InfoEndpoint(info);
}
}
_
上記のinfo
は定数情報です。変更される可能性のある情報がある場合は、InfoEndpoint
をオーバーライドして、getAdditionalInfo()
のカスタム実装を提供できます。
メインクラスのRepositoryRestMvcAutoConfigurationを除外します。
@EnableAutoConfiguration(exclude = RepositoryRestMvcAutoConfiguration.class)
特定のリソースを除外:特定のリポジトリのみを除外するには、特定のインターフェイスで以下のコードを使用しますが、コントローラーでのマッピングは引き続き機能します。
@Repository
@RestResource(exported = false)
interface SongRepository : JpaRepository<Song, Int>
完全に:完全に除外するには、メインクラスで以前の回答のKotlinバージョンを使用します。
@SpringBootApplication
@EnableAutoConfiguration(exclude = arrayOf(RepositoryRestMvcAutoConfiguration::class))
class WebserviceApplication
以下の依存関係を使用する
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
の代わりに
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>