Micronaut HttpClient:处理URI中空格的正确方法

时间:2019-01-21 02:29:03

标签: micronaut

我在Java8上使用micronaut 1.0.3。我试图了解HttpClient何时以及如何需要编码。

第一个问题:

当我将HttpClient与URI中的空格一起使用时,出现错误:java.lang.IllegalArgumentException:索引6处路径中的非法字符:/ bleah bleah

问题:我需要对URI进行编码吗?我希望HttpClient可以为我做这件事。

第二个问题:

我尝试使用Java的URLEncoder进行编码,该URLEncoder将空格转换为+。这与服务器上的端点不匹配。我在服务器上得到以下内容:

18:26:02.261 [nioEventLoopGroup-1-9] DEBUG i.m.h.server.netty.NettyHttpServer - Server localhost:8081 Received Request: GET /bleah+bleah
18:26:02.261 [nioEventLoopGroup-1-9] DEBUG i.m.h.s.netty.RoutingInBoundHandler - Matching route GET - /bleah+bleah
18:26:02.262 [nioEventLoopGroup-1-9] DEBUG i.m.h.s.netty.RoutingInBoundHandler - No matching route found for URI /bleah+bleah and method GET
18:26:02.262 [nioEventLoopGroup-1-9] DEBUG i.m.h.s.netty.RoutingInBoundHandler - Encoding emitted response object [Page Not Found] using codec: io.micronaut.jackson.codec.JsonMediaTypeCodec@4a8b5227

如果我使用%20对空格进行编码,那么一切都很好。

问题:为什么URL不匹配?编码网址的正确方法是什么?

https://github.com/gboersma/http-client-encoding-issue处进行示例项目。

2 个答案:

答案 0 :(得分:0)

结果证明URI确实需要编码。有一个实用程序类UriBuilder,用于生成编码的URL。在这种情况下,正确的使用方式类似于UriBuilder.of("/{parameter}”).expand(parameter, ‘bleah bleah’).toString()

感谢塞尔吉奥·德尔阿莫(Sergio del Amo)澄清了这一点。

答案 1 :(得分:-1)

首先回答您的第一个问题:当然您应该在URL中对空格进行编码,但是HttpClient不会自动为您提供帮助,您可以使用java的replace方法来替换空格; 其次,我不知道真正的原因,但是使用%20替换空格是一种常规操作,就像使用%23替换'#'一样,没有必要深入探讨< / p>