英文:
Spring UriTemplateHandler.expand not encoding plus (+) symbol
问题
我正在使用OpenAPI的生成器创建一个Spring RestTemplate
客户端。
它使用以下代码片段从查询参数生成最终的URI。
restTemplate.getUriTemplateHandler().expand(pathTemplate, variables)
当参数值包含加号+
符号时,它存在问题,因为它不会将+
编码为%2B
,但如果提供%2B
,它会对%
符号进行双重编码,所以也是错误的。这看起来像是一个错误。是否有一种方法可以在没有上游修复的情况下覆盖这个问题?
英文:
I'm using OpenAPI's generator to create a Spring RestTemplate
client.
It uses the following snippet to produce the final URI from query parameters.
restTemplate.getUriTemplateHandler().expand(pathTemplate, variables)
This has problems when the parameter value contains the plus +
symbol because it does not encode the +
into %2B
but when provided with %2B
, it double encodes the %
symbol, so it's also wrong. This looks like a bug. Is there a way to override this without an upstream fix?
答案1
得分: 2
你可以通过向你的 UriTemplateHandler 添加 EncodingMode 来解决这个问题。当你构建 RestTemplate bean 时,可以在那里添加编码器。
@Bean
public RestTemplate restTemplate() {
DefaultUriBuilderFactory builderFactory = new DefaultUriBuilderFactory();
builderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
return new RestTemplateBuilder().uriTemplateHandler(builderFactory).build();
}
英文:
You can resolve this by adding an EncodingMode to your UriTemplateHandler. When you're constructing your RestTemplate bean, you can add the encoder there.
@Bean
public RestTemplate restTemplate() {
DefaultUriBuilderFactory builderFactory = new DefaultUriBuilderFactory();
builderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
return new RestTemplateBuilder().uriTemplateHandler(builderFactory).build();
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论