Spring Data Rest基本路径

时间:2014-02-25 19:53:06

标签: spring-data-rest

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

是否可以更改Rest API的基本URL? E.g:

http://localhost:8080/rest/customers

而不是

http://localhost:8080/customers

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

7 个答案:

答案 0 :(得分:27)

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

spring.data.rest.baseUri=api

可替换地:

spring.data.rest.base-uri=api

(Spring Boot使用relaxed binding系统)

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

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

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

答案 1 :(得分:15)

您可以通过以下方式覆盖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();
    }
  }
}

答案 2 :(得分:15)

我使用了春季启动1.2.3.REALEASE 我尝试了spring.data.rest.baseUri=/apispring.data.rest.basePath=/api,但它无效。

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

答案 3 :(得分: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";
    }
}

答案 4 :(得分:1)

查看官方文档how to change 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");
      }
    };
  }
}

答案 5 :(得分: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=

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

另见Add context path to Spring Boot application

答案 6 :(得分:0)

添加到application.properties(春季启动版本2.2.0.M2)的以下行

spring.mvc.servlet.path=/rest

希望这会有所帮助