27

我通过创建扩展 RepositoryRestMvcConfiguration 的 Java 配置类并将 @RestResource 添加到存储库,将 Spring Data Rest (2.0) 添加到现有 Spring MVC 应用程序。

是否可以更改 Rest API 的基本 URL?例如:

http://localhost:8080/rest/customers

代替

http://localhost:8080/customers

我尝试使用 setBaseURI 覆盖 configureRepositoryRestConfiguration,但它似乎不适用于响应中的所有链接。

4

7 回答 7

31

Spring Boot 1.2开始,您可以设置此属性:

spring.data.rest.baseUri=api

或者:

spring.data.rest.base-uri=api

(Spring Boot 使用宽松的绑定系统)

注意:我发现如果您RepositoryRestMvcConfiguration使用自定义配置进行扩展,该属性不会生效。有关更多信息,请参阅:

https://github.com/spring-projects/spring-boot/issues/2392

一旦 Spring Boot 的下一个版本发布(1.2.1 之后),解决方案将改为扩展RepositoryRestMvcBootConfiguration

于 2015-01-22T04:07:07.230 回答
16

您可以RepositoryRestMvcConfiguration通过以下方式覆盖它来配置它:

@Configuration
@Import(RepositoryRestMvcConfiguration.class)
public class RestDataConfig  extends RepositoryRestMvcConfiguration {

  @Override
  protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
    super.configureRepositoryRestConfiguration(config);
    try {
      config.setBaseUri(new URI("/data"));
    } catch (URISyntaxException e) {
      e.printStackTrace();
    }
  }
}
于 2014-06-08T12:23:32.320 回答
15

我使用了 spring boot 1.2.3.REALEASE 我试过spring.data.rest.baseUri=/apispring.data.rest.basePath=/api它不起作用。

在尝试和谷歌搜索之后:server.servlet-path=/api为我工作。

于 2015-05-29T04:23:58.137 回答
7

将以下行添加到 application.properties(Spring boot 版本 2.2.0.M2)

spring.mvc.servlet.path=/rest

希望这可以帮助

于 2019-05-12T18:44:40.377 回答
6

我通过添加第二个“AbstractAnnotationConfigDispatcherServletInitializer”解决了我的问题:

public class RestWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { RepositoryRestMvcConfiguration.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/rest/*" };
    }

    @Override
    protected Filter[] getServletFilters() {
        return null;
    }

    @Override
    protected String getServletName() {
        return "rest-exporter";
    }
}
于 2014-02-25T20:26:30.540 回答
4

看官方文档如何改变rest base uri

但我不知道为什么对我来说spring.data.rest.basePath=/api财产不起作用,我必须写第二个解决方案:

@Configuration
class CustomRestMvcConfiguration {

  @Bean
  public RepositoryRestConfigurer repositoryRestConfigurer() {

    return new RepositoryRestConfigurerAdapter() {

      @Override
      public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.setBasePath("/api");
      }
    };
  }
}
于 2017-03-28T08:08:10.990 回答
0

见官方文档

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

server.servlet-path=/ # Path of the main dispatcher servlet.
server.context-path=

您可以将其包含在配置文件中。

另请参阅将上下文路径添加到 Spring Boot 应用程序

于 2016-04-22T15:34:11.027 回答