配置的基本路径

时间:2016-01-13 16:47:10

标签: java spring spring-boot spring-data-rest spring-hateoas

我使用Spring Boot 1.3.1.RELEASE并尝试创建自定义存储库+控制器。我将basePath配置为/ api,并且无法弄清楚如何将自定义Controller的URI自动相对于basePath。我缺少一些魔法?

这是控制器。我也尝试过以下各种属性的组合。我留下了已注释掉的内容,以便您可以看到我尝试过的内容。

@RepositoryRestController
// @Controller
@ExposesResourceFor(AnalystSummaryModel.class)
// @RequestMapping("/analystsummaries")
public class AnalystSummaryController {

    @Autowired
    AnalystSummaryRepository repository;

    @Autowired
    private AnalystSummaryResourceAssembler resourceAssembler;

    @ResponseBody
    @RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
    public PagedResources<AnalystSummaryModel> getAnalystSummaries(
            final Pageable pageable,
            final PagedResourcesAssembler assembler) {
        final Page<AnalystSummaryModel> analystSummaries = repository.findAll(pageable);
        return assembler.toResource(analystSummaries, resourceAssembler);
    }
}

我还基于另一个question创建了一个ResourceProcessor。

当我查看/ api端点时,我看到以下内容:

{
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080"
    },
    "profile" : {
      "href" : "http://localhost:8080/api/profile"
    }
  }
}

当我取消注释@RequestMapping时,我得到:

{
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/analystsummaries"
    },
    "profile" : {
      "href" : "http://localhost:8080/api/profile"
    }
  }
}

我错过了将映射相对于basePath的问题,我在application.yml中将其设置为以下内容?

  

spring.data.rest.base-path:/ api

更多信息:

使用@BasePathAware实际上会导致这个控制器服务有两个不同的URI!它显示在/ /和/ api / analystSummaries(因为自动复数等)。然后在使用ControllerLinkBuilder时,它使用第一个路径。所以我更新的问题是:为什么这会暴露两次?如何消除隐式根(因为没有@RequestMapping)并保留/ api下的那个?

2 个答案:

答案 0 :(得分:0)

摆脱OpenCV并添加:

spring.data.rest.base-path: /api

答案 1 :(得分:0)

自Spring boot 1.4.0.RC1以来,可以使用特定配置完成此操作。

How to configure a default @RestController URI prefix for all controllers?

上查看我的回答