【问题标题】:Webflux Webclient escape slash in URLURL中的Webflux Webclient转义斜杠
【发布时间】:2020-07-30 22:41:35
【问题描述】:

我需要在 URL 中包含一个斜杠以访问 RabbitMQ API,并且我正在尝试使用 WebClient 获取数据:

WebClient.builder()
     .baseUrl("https://RABBIT_HOSTNAME/api/queues/%2F/QUEUE_NAME")
     .build()
     .get().exchange();

当我将/ 替换为%2F 时,我可以在请求描述符中看到%2F 已更改为%252F,因此我没有找到响应。

我尝试了以下选项:

"\\/" - WebClient 更改为 %5C,但 Rabbit 没有正确解释它并返回 404。

"%5C" - WebClient 更改为 %255C,Rabbit 返回 404。

如何使用 WebClient 将%2F 持久保存在 URL 中?

【问题讨论】:

    标签: java spring spring-webflux spring-webclient


    【解决方案1】:

    默认情况下它总是对 URL 进行编码,所以我可以看到两个选项

    1. 完全忽略baseUrl 方法并将完全限定的URL 传递给uri 方法,这将覆盖baseUrl 方法。

      WebClient.builder()
           .build()
           .uri(URI.create( "https://RABBIT_HOSTNAME/api/queues/%2F/QUEUE_NAME"))
           .get().exchange();
      
    2. 创建自己的自定义UriBuilderFactory,映射一个Uri,设置编码为NONE

      public class CustomUriBuilderFactory extends DefaultUriBuilderFactory {
      
          public CustomUriBuilderFactory(String baseUriTemplate) {
              super(UriComponentsBuilder.fromHttpUrl(baseUriTemplate));
              super.setEncodingMode(EncodingMode.NONE);
          }
      }
      

      然后您可以使用baseUrl 中的uriBuilderFactory,这将允许您仍然仅将uri 用于uri 部分

      WebClient.builder()
              .uriBuilderFactory(
                  new CustomUriBuilderFactory(
                      "https://RABBIT_HOSTNAME/api/queues/%2F/QUEUE_NAME"
              ))
              .build()
              .get()
              .uri(whatever)
              .exchange();
      

    【讨论】:

      【解决方案2】:

      你可以这样实现:

      URI uri = URI.create("%2F");
      

      还有:

      WebClient.builder()
              .baseUrl("https://RABBIT_HOSTNAME/api/queues")
              .build()
              .post()
              .uri(uriBuilder -> uriBuilder.pathSegment(uri.getPath(), "QUEUE_NAME").build())...
      

      【讨论】:

      • 我更正了答案,也许这个解决方案对你有用?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      相关资源
      最近更新 更多