我目前正在使用Spring Boot,Hibernate和Spring- HATEOAS构建具有REST接口的应用程序。我的数据模型被定义为带有@Entity注释的bean,并且我正在使用Spring的功能来自动设置一个Hibernate存储库(创建一个扩展接口PagingAndSortingRepository)。我的应用程序是完全注解驱动的,即,我没有web.xml,但配置所有与Spring的注解一样@Configuration,@Bean等等,从我开始应用main方法的帮助下SpringApplication.run(MyApp.class, args);
@Entity
PagingAndSortingRepository
web.xml
@Configuration
@Bean
main
SpringApplication.run(MyApp.class, args);
这可以正常工作,但是使用这种方法可以创建一个RepositoryRestHandlerMapping和EndpointHandlerMapping。这些创建了大量我既不需要也不想要的资源。我实现了自己的控制器,因为它们需要做的不仅仅是标准逻辑。
RepositoryRestHandlerMapping
EndpointHandlerMapping
如何防止这种默认行为并禁用这些映射?
我需要其他REST功能,例如@RestController注释。但是我自己现在找到了一个可行的解决方案:
@RestController
false)。我对所有存储库都进行了此操作,现在仍然安装了通配符资源,但是没有注册存储库来解决它们,从而使它们有效地消失了。尝试访问这样的资源给出了404`预期的结果。
。我对所有存储库都进行了此操作,现在仍然安装了通配符资源,但是没有注册存储库来解决它们,从而使它们有效地消失了。尝试访问这样的资源给出了
与相同EndpointHandlerMapping,来自spring-boot- actuator并安装了一些端点,例如/info,/metrics等等。这很方便,应该存在于REST应用程序中;当我在Eureka服务器上注册我的应用程序时,它会自动生成指向其中一些链接。为了正确使用它,可以例如通过配置端点@Bean,如下所示:
spring-boot- actuator
/info
/metrics
@Configuration public class InfoConfiguration { @Bean public InfoEndpoint infoEndpoint { Map<String, Object> info = ... return new InfoEndpoint(info); } }
在info上面的是恒定的信息,如果有信息是可能发生变化,一个可以覆盖InfoEndpoint和提供的自定义实现getAdditionalInfo()。
info
InfoEndpoint
getAdditionalInfo()