在 spring webflux 中使用 uri() 时如何保留 baseUrl
How to keep baseUrl when using uri() in spring webflux
使用 spring boot 2.1.3.RELEASE,WebClient
将在传递 URI
到 uri()
方法时停止使用提供的 baseUrl
.不过,当字符串传递给 uri()
时,它将保留 baseUrl
。
如何提供 baseUrl
并传递 URI
?
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:
请求 url 变为
request url: /foo/%23bar
如果您传递新的 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();
稍微不同的方式 - 在现有的 uri 对象上使用 path 而不是 pathSegment。它有助于以 configuration/constant 形式方便地维护路径。
final WebClient webClient = WebClient
.builder()
.baseUrl("http://localhost")
.build();
webClient
.get()
.uri(uriBuilder -> uriBuilder.path("api/v2/json/test").build())
.exchange();
一旦你设置了一个 UriBuilderFactory
就像你通过 baseUrl(String uri)
调用所做的那样,添加所需分支的最简单方法是使用
uri(String uri,Object... uriVariables) 签名,没有指定第二个参数,因为它被声明为 varargs 然后可以是 0 长度。
在你的例子中,它简单地简化为:
public WebClient webClient() {
return WebClient.builder()
.baseUrl("https://example.com")
.build();
}
webClient.get().uri("/foo/bar")
使用 spring boot 2.1.3.RELEASE,WebClient
将在传递 URI
到 uri()
方法时停止使用提供的 baseUrl
.不过,当字符串传递给 uri()
时,它将保留 baseUrl
。
如何提供 baseUrl
并传递 URI
?
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:
请求 url 变为
request url: /foo/%23bar
如果您传递新的 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();
稍微不同的方式 - 在现有的 uri 对象上使用 path 而不是 pathSegment。它有助于以 configuration/constant 形式方便地维护路径。
final WebClient webClient = WebClient
.builder()
.baseUrl("http://localhost")
.build();
webClient
.get()
.uri(uriBuilder -> uriBuilder.path("api/v2/json/test").build())
.exchange();
一旦你设置了一个 UriBuilderFactory
就像你通过 baseUrl(String uri)
调用所做的那样,添加所需分支的最简单方法是使用
uri(String uri,Object... uriVariables) 签名,没有指定第二个参数,因为它被声明为 varargs 然后可以是 0 长度。
在你的例子中,它简单地简化为:
public WebClient webClient() {
return WebClient.builder()
.baseUrl("https://example.com")
.build();
}
webClient.get().uri("/foo/bar")