Sai*_*man 5 uri uribuilder spring-boot spring-webflux spring-webclient
参考: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();
Run Code Online (Sandbox Code Playgroud)
但是,我已经在字符串变量中获得了值https://example.com/mypage(从数据库中获取)。我可以直接使用这个字符串而不是单独指定方案和路径/主机吗?现在我正在手动将主字符串分成单独的部分。
Ken*_*han 10
您可以使用UriComponentsBuilder构建URI:
URI uri = UriComponentsBuilder.fromHttpUrl("https://example.com/mypage").path("/{id}.xml").build(id);
myWebClient.get()
.uri(uri)
.header(AUTHORIZATION, getAuthorizationHeaderValue(username, password))
....
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要发送的 HTTP 请求有一些通用设置(即您的情况下的基本 url 和授权标头),您可以在级别上配置它们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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14395 次 |
| 最近记录: |