How can I map a Spring Boot @RepositoryRestResourc

2019-02-16 13:32发布

问题:

I cannot seem to be able to map my Repository in any location other than the following:

@RepositoryRestResource(collectionResourceRel = "item", path = "item")
public interface ItemRepository extends PagingAndSortingRepository<Item, Long> {

I thought I can use:

 path = "/some/other/path/item"

but the mapping does not resolve. I get:

HTTP ERROR 404

Problem accessing /some/other/path/item. Reason:

Not Found

In spring-data javadoc path is defined as: "The path segment under which this resource is to be exported."

What am I doing wrong?

回答1:

You need to extend the RepositoryRestMvcConfiguration and override the configureRepositoryRestConfiguration(RepositoryRestConfiguration config) to set yours baseUri. e.g.

@Configuration
public class MyRepositoryRestMvcConfiguration extends RepositoryRestMvcConfiguration {

    private static final String MY_BASE_URI_URI = "/my/base/uri";

    @Override
    protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        super.configureRepositoryRestConfiguration(config);
        config.setBaseUri(URI.create(MY_BASE_URI_URI));
    }
}


回答2:

To change the base URI, you can also just add this to application.properties:

spring.data.rest.base-path=/my/base/uri


回答3:

Correct application property is the following: spring.data.rest.base-path=/my/base/path (base-path instead of base-uri)



回答4:

In spring boot 2

@Configuration
public class RepositoryConfiguration extends RepositoryRestConfigurerAdapter
{

   @Override
   public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config)
   {
      config.setBasePath("/my/base/uri");
   }
}


回答5:

I think the path attribute is used to specify a path segment (so no slashes). The "/some/other/path" would have to be the servlet path or the context path (i.e. nothing to do with Spring Data).