如何在不指定方案、单独托管的情况下使用 UriBuilder 构建 URI?
How to build URI with UriBuilder without specifying scheme, host separately?
参考:org.springframework.web.util.UriBuilder
我正在使用 UriBuilder
为端点构建 URI
final String response = myWebClient.get()
.uri(uriBuilder -> uriBuilder.scheme("https").path("example.com/mypage").path("/{id}.xml").build(id))
.header(AUTHORIZATION, getAuthorizationHeaderValue(username, password))
.accept(MediaType.TEXT_XML)
.retrieve()
.bodyToMono(String.class)
.block();
但是,我已经在字符串变量(从数据库中获取)中有了值 https://example.com/mypage
。我可以直接使用这个字符串而不是单独指定方案和 path/host 吗?现在我正在手动将主字符串拆分成单独的部分。
您可以使用 UriComponentsBuilder
构建一个 URI
:
URI uri = UriComponentsBuilder.fromHttpUrl("https://example.com/mypage").path("/{id}.xml").build(id);
myWebClient.get()
.uri(uri)
.header(AUTHORIZATION, getAuthorizationHeaderValue(username, password))
....
或者,如果您需要发送的 HTTP 请求有一些通用设置(即在您的情况下为基础 url 和授权 header),您可以在 WebClient.Builder
水平。默认情况下,此构建器的 WebClient
构建将使用这些通用设置进行配置,因此您无需为每个 HTTP 请求一次又一次地配置它们。类似于:
@Component
public class ExampleComClient {
private final WebClient webClient;
@Autowired
public ExampleComClient(WebClient.Builder builder) {
this.webClient = builder.baseUrl("https://example.com/mypage")
.defaultHeader(AUTHORIZATION, getAuthorizationHeaderValue(username, password))
.build();
}
public String getById(Integer id){
return webClient.get()
.uri(uriBuilder -> uriBuilder.path("/{id}.xml").build(id))
.accept(MediaType.TEXT_XML)
.retrieve()
.bodyToMono(String.class)
.block();
}
public String getByName(String name){
return webClient.get()
.uri(uriBuilder -> uriBuilder.queryParam("name",name).build())
.accept(MediaType.TEXT_XML)
.retrieve()
.bodyToMono(String.class)
.block();
}
}
参考:org.springframework.web.util.UriBuilder
我正在使用 UriBuilder
为端点构建 URI
final String response = myWebClient.get()
.uri(uriBuilder -> uriBuilder.scheme("https").path("example.com/mypage").path("/{id}.xml").build(id))
.header(AUTHORIZATION, getAuthorizationHeaderValue(username, password))
.accept(MediaType.TEXT_XML)
.retrieve()
.bodyToMono(String.class)
.block();
但是,我已经在字符串变量(从数据库中获取)中有了值 https://example.com/mypage
。我可以直接使用这个字符串而不是单独指定方案和 path/host 吗?现在我正在手动将主字符串拆分成单独的部分。
您可以使用 UriComponentsBuilder
构建一个 URI
:
URI uri = UriComponentsBuilder.fromHttpUrl("https://example.com/mypage").path("/{id}.xml").build(id);
myWebClient.get()
.uri(uri)
.header(AUTHORIZATION, getAuthorizationHeaderValue(username, password))
....
或者,如果您需要发送的 HTTP 请求有一些通用设置(即在您的情况下为基础 url 和授权 header),您可以在 WebClient.Builder
水平。默认情况下,此构建器的 WebClient
构建将使用这些通用设置进行配置,因此您无需为每个 HTTP 请求一次又一次地配置它们。类似于:
@Component
public class ExampleComClient {
private final WebClient webClient;
@Autowired
public ExampleComClient(WebClient.Builder builder) {
this.webClient = builder.baseUrl("https://example.com/mypage")
.defaultHeader(AUTHORIZATION, getAuthorizationHeaderValue(username, password))
.build();
}
public String getById(Integer id){
return webClient.get()
.uri(uriBuilder -> uriBuilder.path("/{id}.xml").build(id))
.accept(MediaType.TEXT_XML)
.retrieve()
.bodyToMono(String.class)
.block();
}
public String getByName(String name){
return webClient.get()
.uri(uriBuilder -> uriBuilder.queryParam("name",name).build())
.accept(MediaType.TEXT_XML)
.retrieve()
.bodyToMono(String.class)
.block();
}
}