当前位置: 首页 > 知识库问答 >
问题:

如何禁用RepositoryRestHandler映射和Endpoint Handler映射?

岳毅
2023-03-14

我目前正在使用Spring Boot、Hibernate和Spring HATEOAS构建一个带有REST接口的应用程序。我的数据模型被定义为带有@Entity注释的bean,我正在使用Spring的功能自动设置一个Hibernate存储库(创建一个扩展分页和排序存储库的接口)。我的应用程序完全由注释驱动,也就是说,我没有web。xml但是使用Spring注释来配置一切,比如@Configuration@Bean等等,并在SpringApplication的帮助下从我的main方法启动应用程序。运行(MyApp.class,args)

这很好,但通过这种方法,可以创建RepositoryRestHandlerMappingEndpointHandlerMapping。这些创造了一堆我既不需要也不想要的资源。我实现自己的控制器,因为它们需要做的不仅仅是标准逻辑。

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


共有3个答案

隆礼骞
2023-03-14

>

  • 排除特定资源:要仅排除特定存储库,请在特定界面中使用下面的代码,控制器中的映射仍然有效。

    @Repository
    @RestResource(exported = false)
    interface SongRepository : JpaRepository<Song, Int>
    

    完全:要完全排除,请使用主类中先前答案的静态编程语言版本:

     @SpringBootApplication
     @EnableAutoConfiguration(exclude = arrayOf(RepositoryRestMvcAutoConfiguration::class))
     class WebserviceApplication
    

  • 温智明
    2023-03-14
    匿名用户

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

    不应该禁用RepositoryRestHandlerMap,但是可以通过用@RepositoryRestResources(导出=false)注释它们来禁用存储库的导出。我对我所有的存储库都这样做了,现在,通配符资源仍然安装,但是没有存储库注册来解决它们,使它们有效地消失。尝试访问这样的资源会像预期的那样给出一个404

    同样适用于EndpointHandlerMapping,它来自spring boot actuator,安装了一些endpoint,如/info/metrics等。这很方便,应该出现在REST应用程序中;当我向Eureka服务器注册我的应用程序时,它会自动生成指向其中一些应用程序的链接。为了正确地使用它,可以通过@Bean配置endpoint,例如:

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

    上面的info是常量info,如果有可能更改的info,可以重写InfoEndpoint并提供自定义的getAdditionalInfo()实现。

    蒋健
    2023-03-14

    排除主类中的RepositoryRestMvcAutoConfiguration。

    @EnableAutoConfiguration(exclude = RepositoryRestMvcAutoConfiguration.class)
    
     类似资料:
    • 我在一个项目中使用Spring Boot和Data REST,我想禁用以下默认映射来调试映射问题: 我发现这个问题禁用了,这会导致这些映射不被映射。但是,我的控制器映射也不会被映射。 我可以在保留我定义的映射时禁用这些映射吗? 提前谢谢。

    • 我有以下代码: 如果我想迭代Map,上面的代码工作得很好。但是现在我有这样的东西。 我想在映射中遍历映射,并获取它的键和值。我想得到key1、value1、key2、value2、key3、value3的值,依此类推。那我该怎么做呢?

    • 前缀映射,后缀映射和缓存映射 通过 names.NewPrefixMapper(names.SnakeMapper{}, "prefix") 可以创建一个在 SnakeMapper 的基础上在命名中添加统一的前缀,当然也可以把 SnakeMapper{} 换成 SameMapper 或者你自定义的 Mapper。 例如,如果希望所有的表名都在结构体自动命名的基础上加一个前缀而字段名不加前缀,则可以

    • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

    • 前端将这个json发送到我的API 控制器:

    • 假设我有一组字符串和一个散列函数(或任何单边函数)和一个测试函数。我想用Java8流创建一个从输入字符串到通过测试函数的哈希值的映射。我的问题是如何在中编写? 看来老的for循环是最简洁的解决方案。