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

chr*_*con 7 java spring spring-webflux

使用 spring boot 2.1.3.RELEASE,在传递to方法时WebClient将停止使用所提供的。当一个字符串被传递给它时它会保留。baseUrlURIuri()baseUrluri()

我如何提供一个baseUrl并通过一个URI

public WebClient webClient() {
  return WebClient.builder()
    .baseUrl("https://example.com/")
    .build();
}
Run Code Online (Sandbox Code Playgroud)

webClient.get().uri(URI.create("/foo/%23bar"))... 
Run Code Online (Sandbox Code Playgroud)

投掷

java.lang.IllegalArgumentException: URI 不是绝对的:

并且请求网址变为

request url: /foo/%23bar
Run Code Online (Sandbox Code Playgroud)

Kon*_*aev 10

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

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


Pro*_*was 10

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

final WebClient webClient = WebClient.builder()
                                     .baseUrl("http://localhost")
                                     .build();

webClient.get()
         .uri(uriBuilder -> uriBuilder.path("api/v2/json/test").build())
         .exchange();
Run Code Online (Sandbox Code Playgroud)