如何禁用RepositoryRestHandlerMapping和EndpointHandlerMapping?

时间:2014-11-04 15:49:38

标签: spring spring-mvc spring-boot spring-data-jpa spring-hateoas

我目前正在使用Spring Boot,Hibernate和Spring-HATEOAS构建一个带REST接口的应用程序。我的数据模型定义为具有@Entity注释的bean,我使用Spring的功能自动设置Hibernate存储库(创建扩展PagingAndSortingRepository的接口)。我的应用程序是完全注释驱动的,即我没有web.xml但是使用@Configuration@Bean等Spring注释来配置所有内容,并从我的{{1}启动应用程序} {方法} main

的帮助

这很好用,但是使用这种方法,会创建SpringApplication.run(MyApp.class, args);RepositoryRestHandlerMapping。这些创造了我既不需要也不想要的一堆资源。我实现了自己的控制器,因为它们需要做的不仅仅是标准逻辑。

如何阻止此默认行为并禁用这些映射?

5 个答案:

答案 0 :(得分:20)

排除主类中的RepositoryRestMvcAutoConfiguration。

group by

答案 1 :(得分:7)

我需要其他REST函数,例如@RestController注释。但我现在找到了一个可行的解决方案:

不应禁用

RepositoryRestHandlerMapping,但可以通过使用@RepositoryRestResource(exported = false)注释来禁用存储库的导出。我使用我的所有存储库执行此操作,现在仍然安装了通配符资源,但没有注册存储库来解决它们,使它们有效地消失。尝试访问此类资源会产生预期的404

来自EndpointHandlerMapping的{​​{1}}相同,并安装了一些端点,如spring-boot-actuator/info等。这很方便,应该存在于REST应用程序中;当我使用Eureka服务器注册我的应用程序时,它会自动生成其中一些的链接。要正确使用此端点,端点可以通过/metrics进行配置,如下所示:

@Bean

上面的@Configuration public class InfoConfiguration { @Bean public InfoEndpoint infoEndpoint { Map<String, Object> info = ... return new InfoEndpoint(info); } } 是常量信息,如果有可能更改的信息,可以覆盖info并提供InfoEndpoint的自定义实现。

答案 2 :(得分:1)

科特林

  • 排除特定资源:要仅排除特定存储库,请使用特定界面中的以下代码,Controller中的映射仍然有效。

    @Repository
    @RestResource(exported = false)
    interface SongRepository : JpaRepository<Song, Int>
    
  • 完全:要完全排除,请使用主要课程中之前答案的Kotlin版本:

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

答案 3 :(得分:0)

使用以下依赖项

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

答案 4 :(得分:0)

添加到依赖项下面时,HAL 资源的自动创建也是开箱即用的。

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-rest-hal-explorer</artifactId>
        </dependency>

正如依赖名称所说,它会自动为您创建 HAL 资源管理器链接。
如果您不想自动创建控制器,请删除此依赖项。