如何在不指定方案的情况下使用 UriBuilder 构建 URI,单独托管?
Posted
技术标签:
【中文标题】如何在不指定方案的情况下使用 UriBuilder 构建 URI,单独托管?【英文标题】:How to build URI with UriBuilder without specifying scheme, host separately? 【发布时间】:2021-12-30 17:30:32 【问题描述】:参考: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
(从数据库中获取)。我可以直接使用这个字符串而不是分别指定方案和路径/主机吗?现在我正在手动将主字符串拆分为单独的部分。
【问题讨论】:
【参考方案1】:您可以使用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 和 Authorization 标头),您可以在 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();
【讨论】:
以上是关于如何在不指定方案的情况下使用 UriBuilder 构建 URI,单独托管?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用代码的情况下使用约束 AutoLayout 来指定横向与纵向的不同布局?
如何在不指定字段名称的情况下使用 mongodb 在 nodejs 中进行部分数据搜索? [复制]