正确 URL # Java WebClient 的编码
Correct URL encoding of # Java 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);
我的 ID 以“#”开头,因此如果我使用此代码,结果将是:
https://localhost:8081/getPost/#id1
问题是我需要它 url 编码,所以它应该是 getPost/%23id1,我尝试在 id 上使用 URLEncoder 但结果是双重编码:
https://localhost:8081/getPost/%25%23id1
我需要摆脱那个 %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...
我正尝试使用此代码从我的 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);
我的 ID 以“#”开头,因此如果我使用此代码,结果将是:
https://localhost:8081/getPost/#id1
问题是我需要它 url 编码,所以它应该是 getPost/%23id1,我尝试在 id 上使用 URLEncoder 但结果是双重编码:
https://localhost:8081/getPost/%25%23id1
我需要摆脱那个 %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...