【发布时间】:2016-04-18 18:15:57
【问题描述】:
我正在使用 Spring Boot 1.3.1.RELEASE 并尝试创建自定义存储库 + 控制器。我将 basePath 配置为 /api,但无法弄清楚如何将自定义控制器的 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"
}
}
}
我缺少什么让映射与我在 application.yml 中设置的 basePath 相关?
spring.data.rest.base-path:/api
更多信息:
使用@BasePathAware 实际上会导致这个控制器服务有两个不同的URI!它显示在 / 以及 /api/analystSummaries (因为自动复数等)。然后在使用 ControllerLinkBuilder 时,它使用第一个的路径。所以我更新的问题是:为什么这会暴露两次?如何消除隐式根(因为没有 @RequestMapping)并保留 /api 下的根?
【问题讨论】:
标签: java spring spring-boot spring-data-rest spring-hateoas