Err*_*215 5 java spring-webclient
我尝试使用此代码从我的 API 检索数据:
Mono<String> client = WebClient.builder()
.baseUrl("https://localhost:8081/getPost/" + id) // or URLEncoder.encode(id, "UTF-8")
.defaultHeaders(new Consumer<HttpHeaders>() {
@Override
public void accept(HttpHeaders httpHeaders) {
httpHeaders.addAll(createHeaders());
}
})
.build()
.get()
.retrieve()
.bodyToMono(String.class);
Run Code Online (Sandbox Code Playgroud)
我的 ID 以“#”开头,因此如果我使用此代码,将导致:
https://localhost:8081/getPost/#id1
Run Code Online (Sandbox Code Playgroud)
问题是我需要对其进行 url 编码,因此它应该是 getPost/%23id1,我尝试在 id 上使用 URLEncoder 但结果是双重编码的:
https://localhost:8081/getPost/%25%23id1
Run Code Online (Sandbox Code Playgroud)
我需要摆脱那个%25
WebClient.builder().baseUrl未能正确编码保留字符“#”似乎很奇怪。如果您查看文档,它会说它相当于.uriBuilderFactory(new DefaultUriBuilderFactory(baseUrl)). 因此,您可以进行自己的 URL 编码,但在 WebClient 中抑制它:
DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(
"https://localhost:8081/getPost/" + URLEncoder.encode(id, "UTF-8"));
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.URI_COMPONENT);
Mono<String> client = WebClient.builder()
.uriBuilderFactory(factory)
.defaultHeaders(...)
.build()
...etc...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5586 次 |
| 最近记录: |