我目前正在使用Spring Boot,Hibernate和Spring-HATEOAS构建一个带REST接口的应用程序。我的数据模型定义为具有@Entity
注释的bean,我使用Spring的功能自动设置Hibernate存储库(创建扩展PagingAndSortingRepository
的接口)。我的应用程序是完全注释驱动的,即我没有web.xml
但是使用@Configuration
,@Bean
等Spring注释来配置所有内容,并从我的{{1}启动应用程序} {方法} main
这很好用,但是使用这种方法,会创建SpringApplication.run(MyApp.class, args);
和RepositoryRestHandlerMapping
。这些创造了我既不需要也不想要的一堆资源。我实现了自己的控制器,因为它们需要做的不仅仅是标准逻辑。
如何阻止此默认行为并禁用这些映射?
答案 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 资源管理器链接。
如果您不想自动创建控制器,请删除此依赖项。