小编典典

如何禁用RepositoryRestHandlerMapping和EndpointHandlerMapping?

spring-boot

我目前正在使用Spring Boot,Hibernate和Spring-
HATEOAS构建具有REST接口的应用程序。我的数据模型被定义为带有@Entity注释的bean,并且我正在使用Spring的功能来自动设置一个Hibernate存储库(创建一个扩展接口PagingAndSortingRepository)。我的应用程序是完全注解驱动的,即,我没有web.xml,但配置所有与Spring的注解一样@Configuration@Bean等等,从我开始应用main方法的帮助下SpringApplication.run(MyApp.class, args);

这可以正常工作,但是使用这种方法可以创建一个RepositoryRestHandlerMappingEndpointHandlerMapping。这些创建了大量我既不需要也不想要的资源。我实现了自己的控制器,因为它们需要做的不仅仅是标准逻辑。

如何防止这种默认行为并禁用这些映射?


阅读 507

收藏
2020-05-30

共1个答案

小编典典

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

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

2020-05-30