21

I am currently building an application with a REST interface, using Spring Boot, Hibernate and Spring-HATEOAS. My data model is defined as beans with @Entity annotation and I am using Spring's feature to automatically set up a Hibernate repository (Creating an interface extending PagingAndSortingRepository). My application is completely annotation-driven, i.e., I have no web.xml but configure everything with the Spring annotations like @Configuration, @Bean etc., and start the application from my main method with the help of SpringApplication.run(MyApp.class, args);

This works fine, but with this approach, a RepositoryRestHandlerMapping and EndpointHandlerMapping is created. These create a bunch of resources I neither need nor want. I implement my own controllers because they need to do more than the standard logic.

How can I prevent this default behaviour and disable these mappings?

4

5 回答 5

27

在您的主类中排除 RepositoryRestMvcAutoConfiguration。

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

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

RepositoryRestHandlerMapping不应禁用,但可以通过使用注释来禁用存储库的导出@RepositoryRestResource(exported = false)。我对我所有的存储库都这样做了,现在,通配符资源仍然安装,但没有注册存储库来解决它们,使它们有效地消失。尝试访问这样的资源会得到404预期的结果。

同样 for 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().

于 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 回答
0

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

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

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

于 2021-02-11T09:12:48.410 回答