我如何将 % 与 RestTemplate 一起使用

How can i use % with RestTemplate

我正在尝试向 API 发出 HTTP 请求,路由如下:

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

问题是,ID以%开头,类似"%123123123","执行"方法后,定位到RestTemplateclass,这个ID变成了%25123123123,%变成了%25。 更具体地说,在方法的这一行中:

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

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

有人知道怎么解决吗?

在Spring5之后,DefaultUriBuilderFactory,被RestTemplate使用,默认为EncodingMode.URI_COMPONENT,如下所述:

Expand URI variables first, and then encode the resulting URI component values, replacing only non-ASCII and illegal (within a given URI component type) characters, but not characters with reserved meaning.

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

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

您可以检查 here 其他编码模式。