Mic*_* Dz 5 java spring spring-webflux spring-webclient
我需要在 URL 中包含一个斜杠来访问 RabbitMQ API,我正在尝试使用WebClient以下方法获取数据:
WebClient.builder()
.baseUrl("https://RABBIT_HOSTNAME/api/queues/%2F/QUEUE_NAME")
.build()
.get().exchange();
Run Code Online (Sandbox Code Playgroud)
当我替换为时/,%2F我可以在%2F已更改为的请求描述符中看到%252F,因此我没有找到响应。
我尝试了以下选项:
• "\\/"- WebClient 更改为%5C但 Rabbit 无法正确解释并返回 404。
• "%5C"- WebClient 更改为%255C,Rabbit 返回 404。
如何%2F使用 WebClient保留url?
默认情况下它总是对 URL 进行编码,所以我可以看到两个选项
完全忽略该baseUrl方法并将完全限定的 URL 传递到该uri方法中以覆盖该baseUrl方法。
WebClient.builder()
.build()
.uri(URI.create( "https://RABBIT_HOSTNAME/api/queues/%2F/QUEUE_NAME"))
.get().exchange();
Run Code Online (Sandbox Code Playgroud)创建您自己的自定义 UriBuilderFactory,映射 Uri,并将编码设置为NONE
public class CustomUriBuilderFactory extends DefaultUriBuilderFactory {
public CustomUriBuilderFactory(String baseUriTemplate) {
super(UriComponentsBuilder.fromHttpUrl(baseUriTemplate));
super.setEncodingMode(EncodingMode.NONE);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用uriBuilderFactory of baseUrl,这将允许你仍然使用 uri 来表示 uri 部分
WebClient.builder()
.uriBuilderFactory(
new CustomUriBuilderFactory(
"https://RABBIT_HOSTNAME/api/queues/%2F/QUEUE_NAME"
))
.build()
.get()
.uri(whatever)
.exchange();
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |