Spring UriTemplateHandler.expand not encoding加号(+)

yrdbyhpb  于 2023-06-21  发布在  Spring
关注(0)|答案(1)|浏览(116)

我正在使用OpenAPI的生成器创建Spring RestTemplate客户端。它使用以下代码片段从查询参数生成最终URI。

restTemplate.getUriTemplateHandler().expand(pathTemplate, variables)

当参数值包含加号+符号时会出现问题,因为它不会将+编码为%2B,但当提供%2B时,它会对%符号进行双重编码,因此也是错误的。这看起来像一个bug。有没有一种方法可以在没有上游修复的情况下覆盖它?

dly7yett

dly7yett1#

您可以通过向UriTemplateHandler添加EncodingMode来解决此问题。在构造RestTemplate bean时,可以在其中添加编码器。

@Bean
public RestTemplate restTemplate() {
    DefaultUriBuilderFactory builderFactory = new DefaultUriBuilderFactory();
    builderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);

    return new RestTemplateBuilder().uriTemplateHandler(builderFactory).build();
}

相关问题