如何在 spring webflux 中使用 uri() 时保持 baseUrl

2022-09-03 01:31:25

使用 spring boot 2.1.3.RELEASE,将停止使用传递 to 方法时提供的。但是,当字符串传递给时,它将保留。WebClientbaseUrlURIuri()baseUrluri()

如何提供 a 并通过 ?baseUrlURI

public WebClient webClient() {
  return WebClient.builder()
    .baseUrl("https://example.com/")
    .build();
}

webClient.get().uri(URI.create("/foo/%23bar"))... 

抛出

java.lang.IllegalArgumentException: URI is not absolute:

并且请求网址变为

request url: /foo/%23bar

答案 1

如果传递新的 URI 对象,则会覆盖基本 URI。您应该使用带有 lambda 的方法作为参数,例如:uri

final WebClient webClient = WebClient
  .builder()
  .baseUrl("http://localhost")
  .build();
webClient
  .get()
  .uri(uriBuilder -> uriBuilder.pathSegment("api", "v2", "json", "test").build())
  .exchange();

答案 2

稍微不同的方式 - 在现有 uri 对象上使用 path 而不是 pathSegment。它有助于以配置/常量形式方便地维护路径。

final WebClient webClient = WebClient
.builder()
.baseUrl("http://localhost")
.build();
webClient
.get()
.uri(uriBuilder -> uriBuilder.path("api/v2/json/test").build())
.exchange();

推荐