正确 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...