我如何将 % 与 RestTemplate 一起使用
How can i use % with RestTemplate
我正在尝试向 API 发出 HTTP 请求,路由如下:
问题是,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 其他编码模式。
我正在尝试向 API 发出 HTTP 请求,路由如下:
问题是,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 其他编码模式。