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

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


我怎样才能提供一个baseUrl并通过一个URI?


public WebClient webClient() {

  return WebClient.builder()

    .baseUrl("https://example.com/")

    .build();

}


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

投掷


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


并且请求网址变为


request url: /foo/%23bar


噜噜哒
浏览 179回答 3
3回答

湖上湖

如果您传递新的 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();

翻翻过去那场雪

稍微不同的方式 -在现有 uri 对象上使用path而不是pathSegment 。它有助于以配置/常量形式方便地维护路径。final WebClient webClient = WebClient.builder().baseUrl("http://localhost").build();webClient.get().uri(uriBuilder -> uriBuilder.path("api/v2/json/test").build()).exchange();

梦里花落0921

一旦你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")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java