我试图修改Hateoas中链接的主机名,但它并不是直接向前看。对于如何修改它以替换主机名,有什么想法吗?
HalModelBuilder builder = HalModelBuilder.halModelOf(resource)
.link(linkTo(methodOn(BaseController.class).method1(...))
.withSelfRel())
.preview(new SummaryResource(...))
.forLink(
linkTo(
methodOn(RefController.class).method2(...)
.withRel("blah"));更新:
我试图用以下代码替换主机名:
HalModelBuilder builder = HalModelBuilder.halModelOf(resource)
.link(
Link.of(
apiGatewayUrl +
linkTo(methodOn(BaseController.class).method1(...)).toUri().getPath())
.withSelfRel())
.preview(new SummaryResource(...))
.forLink(
Link.of(
apiGatewayUrl +
linkTo(methodOn(RefController.class).method2(...)).toUri().getPath())
.withRel("blah"));尝试使用.toUricomponentBuilder()替换主机名,但是url构建不正确。因此,选择将gatewayUrl与生成的hateoas连接起来。
发布于 2020-10-24 11:18:11
似乎你在网关后面使用了Spring。如果网关正确设置x-forwarded-*头,如果使用Spring,则根据弹簧启动文件设置一个属性server.forward-headers-strategy = framework。然后ServletWebServerFactoryAutoConfiguration为您创建一个ForwardedHeaderFilter bean。
@Bean
@ConditionalOnMissingFilterBean(ForwardedHeaderFilter.class)
@ConditionalOnProperty(value = "server.forward-headers-strategy", havingValue = "framework")
public FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
ForwardedHeaderFilter filter = new ForwardedHeaderFilter();
FilterRegistrationBean<ForwardedHeaderFilter> registration = new FilterRegistrationBean<>(filter);
registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.ERROR);
registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
return registration;
}然后Spring生成具有与网关外相同的基本URI (主机名、端口、路径)的链接。见Spring HATEOAS文档。
https://stackoverflow.com/questions/64506722
复制相似问题