How to disable RepositoryRestHandlerMapping and EndpointHandlerMapping?

后端 未结 4 2215
轮回少年
轮回少年 2021-02-07 02:32

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 annota

相关标签:
4条回答
  • 2021-02-07 02:37

    Exclude RepositoryRestMvcAutoConfiguration in your main class.

    @EnableAutoConfiguration(exclude = RepositoryRestMvcAutoConfiguration.class)
    
    0 讨论(0)
  • 2021-02-07 02:41

    Kotlin

    • Exclude Specific resource: To exclude only a specific Repository use the code below in the specific interface, the mapping in the Controller will still work.

      @Repository
      @RestResource(exported = false)
      interface SongRepository : JpaRepository<Song, Int>
      
    • Entirely: To exclude entirely, use the Kotlin version of the previous answers in the main class:

       @SpringBootApplication
       @EnableAutoConfiguration(exclude = arrayOf(RepositoryRestMvcAutoConfiguration::class))
       class WebserviceApplication
      
    0 讨论(0)
  • 2021-02-07 02:50

    I need the other REST functions, like @RestController annotation. But I found a feasible solution myself now:

    RepositoryRestHandlerMapping should not be disabled, but it is possible to disable exporting of repositories by annotating them with @RepositoryRestResource(exported = false). I did this with all my repositories and now, the wildcard resources are still installed, but no repositories are registered to resolve against them, making them effectively disappear. Trying to access such a resource gives a 404 as expected.

    Same for EndpointHandlerMapping, which comes from spring-boot-actuator and installs some endpoints like /info, /metrics etc. This is handy and should be present in a REST application; when I register my application with an Eureka server, it automatically generates links to some of these. To use this correctly, the endpoints can for example be configured via @Bean, like this:

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

    The info above is constant info, if there were info which is subject to change, one could override InfoEndpoint and supply a custom implementation of getAdditionalInfo().

    0 讨论(0)
  • 2021-02-07 02:58

    use below dependency

     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
    

    instead of

       <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-rest</artifactId>
            </dependency>
    
    0 讨论(0)
提交回复
热议问题