21

現在、Spring Boot、Hibernate、および Spring-HATEOAS を使用して、REST インターフェイスを備えたアプリケーションを構築しています。私のデータモデルは注釈付きの Bean として定義されており@Entity、Spring の機能を使用して Hibernate リポジトリを自動的にセットアップしています (Creating an interface extends PagingAndSortingRepository)。私のアプリケーションは完全にアノテーション駆動型です。つまり、web.xmlSpring アノテーションなどを使用してすべてを構成する@Configurationしかありません@BeanmainSpringApplication.run(MyApp.class, args);

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

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

4

5 に答える 5

27

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

@EnableAutoConfiguration(exclude = RepositoryRestMvcAutoConfiguration.class)
于 2015-10-13T12:47:11.620 に答える
9

@RestController注釈など、他の REST 関数が必要です。しかし、私は今、自分で実行可能な解決策を見つけました:

RepositoryRestHandlerMappingを無効にするべきではありませんが、リポジトリに@RepositoryRestResource(exported = false). 私はすべてのリポジトリでこれを行いましたが、ワイルドカード リソースはまだインストールされていますが、それらに対して解決するリポジトリが登録されていないため、それらは効果的に消えます。そのようなリソースにアクセスしようとすると404、期待どおりの結果が得られます。

などのいくつかのエンドポイントEndpointHandlerMappingからspring-boot-actuator取得してインストールするについても同じです。これは便利で、REST アプリケーションに存在する必要があります。アプリケーションを Eureka サーバーに登録すると、これらのいくつかへのリンクが自動的に生成されます。これを正しく使用するために、エンドポイントは、たとえば次のように 経由で構成できます。/info/metrics@Bean

@Configuration
public class InfoConfiguration {

    @Bean
    public InfoEndpoint infoEndpoint {
        Map<String, Object> info = ...
        return new InfoEndpoint(info);
    }
}

上記infoは一定の情報です。変更される可能性がある情報がある場合は、オーバーライドInfoEndpointして のカスタム実装を提供できますgetAdditionalInfo()

于 2014-11-04T16:41:00.790 に答える
3

コトリン

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

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

     @SpringBootApplication
     @EnableAutoConfiguration(exclude = arrayOf(RepositoryRestMvcAutoConfiguration::class))
     class WebserviceApplication
    
于 2017-10-09T14:33:13.323 に答える
1

以下の依存関係を使用

 <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>
于 2019-06-13T09:26:33.623 に答える