【问题标题】:How can i use % with RestTemplate我如何将 % 与 RestTemplate 一起使用
【发布时间】:2020-03-07 04:04:22
【问题描述】:

我正在尝试使用这样的路由向 API 发出 HTTP 请求:

https://example.test/{ID}/get

问题是,ID以%开头,类似“%123123123”,在执行“excute”方法后,定位到RestTemplate类,这个ID变成%25123123123,%变成%25。 更具体地说,在这行方法中:

URI expanded = getUriTemplateHandler().expand(url, uriVariables);

这里我的 uriVariables 只是一个空对象,当我手动更改扩展变量的值删除“25”时,请求工作正常。

有人知道怎么解决吗?

【问题讨论】:

    标签: java spring-boot resttemplate


    【解决方案1】:

    在 Spring 5 之后,RestTemplate 使用的 DefaultUriBuilderFactory,默认为 EncodingMode.URI_COMPONENT,如所述下面:

    首先扩展 URI 变量,然后对生成的 URI 组件值进行编码,仅替换非 ASCII 和非法(在给定 URI 组件类型内)字符,而不是具有保留含义的字符。

    如果您希望您的 URI 像我一样不编码,只需使用 EncodingMode.NONE 创建一个新的 DefaultUriBuilderFactory 并将其添加到您的RestTemplate

    DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory();
    uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setUriTemplateHandler(uriBuilderFactory);
    

    您可以查看here 了解其他 EncondingMode。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-06
      • 2017-05-24
      • 1970-01-01
      • 2021-10-09
      • 2014-06-06
      • 2016-12-06
      • 2016-12-21
      • 1970-01-01
      相关资源
      最近更新 更多