我看到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却没有提及对它的编码。