web-dev-qa-db-ja.com

RepositoryRestHandlerMappingとEndpointHandlerMappingを無効にする方法は?

現在、Spring Boot、Hibernate、Spring-HATEOASを使用して、RESTインターフェイスを備えたアプリケーションを構築しています。データモデルは@Entityアノテーション付きのBeanとして定義されており、Springの機能を使用して自動的にセットアップしていますHibernateリポジトリ(PagingAndSortingRepositoryを拡張するインターフェイスの作成)。私のアプリケーションは完全にアノテーション駆動型です。つまり、web.xmlはありませんが、@Configuration@BeanなどのSpringアノテーションですべてを構成し、アプリケーションを自分から起動します。 SpringApplication.run(MyApp.class, args);の助けを借りたmainメソッド

これは正常に機能しますが、このアプローチでは、RepositoryRestHandlerMappingEndpointHandlerMappingが作成されます。これらは、私が必要も望まないリソースの束を作成します。標準のロジック以上のことを行う必要があるため、独自のコントローラーを実装します。

このデフォルトの動作を防ぎ、これらのマッピングを無効にするにはどうすればよいですか?

19
rabejens

_@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()のカスタム実装を提供できます。

7
rabejens

メインクラスのRepositoryRestMvcAutoConfigurationを除外します。

@EnableAutoConfiguration(exclude = RepositoryRestMvcAutoConfiguration.class)
22
Géza Alpári

Kotlin

  • 特定のリソースを除外:特定のリポジトリのみを除外するには、特定のインターフェイスで以下のコードを使用しますが、コントローラーでのマッピングは引き続き機能します。

    @Repository
    @RestResource(exported = false)
    interface SongRepository : JpaRepository<Song, Int>
    
  • 完全に:完全に除外するには、メインクラスで以前の回答のKotlinバージョンを使用します。

     @SpringBootApplication
     @EnableAutoConfiguration(exclude = arrayOf(RepositoryRestMvcAutoConfiguration::class))
     class WebserviceApplication
    
1
trin94

以下の依存関係を使用する

 <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>
0
fearaus