本文介绍了基本路径未出现在ResourceProcessor自定义链接中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 在Spring Data REST中,我使用 ResourceProcessor 创建自定义链接:In Spring Data REST I'm creating custom links using a ResourceProcessor:@Componentpublic class ServiceInstanceProcessor implements ResourceProcessor<Resource<ServiceInstance>> { @Override public Resource<ServiceInstance> process(Resource<ServiceInstance> resource) { Long id = resource.getContent().getId(); ServiceInstanceController controller = methodOn(ServiceInstanceController.class); resource.add(linkTo(controller.getNodeSummary(id)) .withRel("nodeSummary")); resource.add(linkTo(controller.getHealthBreakdown(id)) .withRel("healthBreakdown")); resource.add(linkTo(controller.getRotationBreakdown(id)) .withRel("rotationBreakdown")); return resource; }}但是生成的链接不包括基本路径,即使我已将控制器标记为 @BasePathAwareController ,即使默认链接包含基本路径:However the generated links don't include the base path, even though I've marked the controller as @BasePathAwareController and even though the default links do include the base path:{ ... "_links" : { "self" : { "href" : "http://localhost:8080/api/serviceInstances/101" }, "serviceInstance" : { "href" : "http://localhost:8080/api/serviceInstances/101{?projection}", "templated" : true }, "nodeSummary" : { "href" : "http://localhost:8080/serviceInstances/101/nodeSummary" }, "healthBreakdown" : { "href" : "http://localhost:8080/serviceInstances/101/healthBreakdown" }, "rotationBreakdown" : { "href" : "http://localhost:8080/serviceInstances/101/rotationBreakdown" }, ...}}是否有我需要做些什么才能让基本路径出现在链接中?Is there anything else I need to do to get the base path to appear in the links?推荐答案我想它与bug有关 ControllerLinkBuilder不会将Spring Data REST的基本路径考虑在内,而且自定义控制器+更改的基本路径未显示在HAL中作为解决方法我接下来做:As workaround I do next:@Autowiredprivate final RepositoryRestConfiguration config;private Link fixLinkSelf(Object invocationValue) { return fixLinkTo(invocationValue).withSelfRel();}@SneakyThrowsprivate Link fixLinkTo(Object invocationValue) { UriComponentsBuilder uriComponentsBuilder = linkTo(invocationValue).toUriComponentsBuilder(); URL url = new URL(uriComponentsBuilder.toUriString()); uriComponentsBuilder.replacePath(config.getBasePath() + url.getPath()); return new Link(uriComponentsBuilder.toUriString());}用法与 linkTo :resources.add(fixLinkSelf(methodOn(VoteController.class).history()));resources.add(fixLinkTo(methodOn(VoteController.class).current()).withRel("current"));基于addPath当前请求的简单案例的其他解决方法:Other workaround for simple case based on current request with addPath:new Link(ServletUriComponentsBuilder.fromCurrentRequest().path(addPath).build().toUriString()) 这篇关于基本路径未出现在ResourceProcessor自定义链接中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 09-15 08:39