如何使用UriBuilder直接传入完整基础URI 无需单独指定scheme、host等参数
解决方案
完全可以直接使用完整基础URI字符串构造URI,无需手动拆分各部分,Spring生态提供了原生支持,以下是两种常用的实现方式:
方案1:动态加载数据库返回的基础URI
如果每次请求的基础URI都需要从数据库动态获取、不固定,可直接通过UriComponentsBuilder.fromUriString()方法加载完整基础URI,再拼接后续动态路径参数即可,示例代码如下:
// 从数据库查询得到的完整基础URI String baseUri = "https://example.com/mypage"; final String response = myWebClient.get() .uri(uriBuilder -> UriComponentsBuilder.fromUriString(baseUri) .path("/{id}.xml") .build(id)) .header(AUTHORIZATION, getAuthorizationHeaderValue(username, password)) .accept(MediaType.TEXT_XML) .retrieve() .bodyToMono(String.class) .block();
方案2:初始化WebClient时统一配置基础URI
如果该基础URI是全局固定的,可在初始化WebClient实例时直接配置baseUrl,后续业务调用时只需传入相对路径即可,简化重复代码:
// 初始化WebClient时统一配置基础路径 WebClient myWebClient = WebClient.builder() .baseUrl(baseUriFromDb) .build(); // 业务调用时只需传动态路径部分 final String response = myWebClient.get() .uri("/{id}.xml", id) .header(AUTHORIZATION, getAuthorizationHeaderValue(username, password)) .accept(MediaType.TEXT_XML) .retrieve() .bodyToMono(String.class) .block();
注意事项
拼接路径时建议新增路径开头添加斜杠,避免基础URI末尾无斜杠时出现拼接错误,也可使用pathSegment方法构造路径,Spring会自动处理路径分隔符的兼容问题。
内容的提问来源于stack exchange,提问作者Saif
相关产品推荐
相关产品推荐

