gpt4 book ai didi

spring-boot - 如何在不指定方案、单独托管的情况下使用 UriBuilder 构建 URI?

转载 作者:行者123 更新时间:2023-12-05 01:26:46 24 4
gpt4 key购买 nike

引用: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。我可以直接使用这个字符串而不是单独指定方案和路径/主机吗?现在我正在手动将主字符串拆分成单独的部分。

最佳答案

您可以使用 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();
}

}

关于spring-boot - 如何在不指定方案、单独托管的情况下使用 UriBuilder 构建 URI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70043338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com