5.1.0.RC3中的DefaultUriBuilderFactory不再对queryParam()值中的空间进行编码

时间:2018-10-03 21:41:56

标签: spring spring-web

我看到Spring Web 5.1.0.RC3将DefaultUriBuilderFactory默认的EncodingMode从URI_COMPONENT更改为TEMPLATE_AND_VALUES。

通过此更改,我发现例如当我从DefaultUriBuilderFactory调用UriBuilder实例时:

uriBuilder.queryParam( "displayValue", "31.135, -108.06222222222222" ).build()

结果URI包含value参数中的原始空间:

http://127.0.0.1:8573/v1/own/position/probe?displayValue=31.135, -108.06222222222222

,因此我的WebClient.get()调用失败,并出现IllegalArgumentException:查询中包含非法字符。

在5.0.9.RELEASE版本中,默认模式为URI_COMPONENT,该空间被编码为%20,因此WebClient HTTP GET成功。

这是在TEMPLATE_AND_VALUES模式下的预期行为,因此,如果我将DefaultUriBuilderFactory保持在该模式下,我应该在将字符串传递给queryParam(String,Object ...)方法之前对其进行预编码吗?

我发现很难说这是否是TEMPLATE_AND_VALUES上的Javadoc的预期行为,因为它没有提到对“组件值”进行编码,而URI_COMPONENT上的Javadoc却没有提及对它的编码。

0 个答案:

没有答案