uri参数中带有斜杠的Rest模板

uri参数中带有斜杠的Rest模板,rest,spring-mvc,spring-boot,resttemplate,slash,Rest,Spring Mvc,Spring Boot,Resttemplate,Slash,我正在使用restemplate进行REST调用,我有一个包含斜杠(即20/20)的uriparam 在调用restemplate之前,我将uriParam转换为使用http编码的20%2f20 当我调用RestTemplate时,它将%转换为%25,并且我收到的数据不正确 可以在参数中使用斜杠调用restTemplate吗 谢谢 代码示例: String urlExample="www.nowhere.com/?variable={variable}"; String variable = U

我正在使用
restemplate
进行REST调用,我有一个包含斜杠(即20/20)的uriparam

在调用
restemplate
之前,我将uriParam转换为使用http编码的
20%2f20

当我调用RestTemplate时,它将
%
转换为
%25
,并且我收到的数据不正确

可以在参数中使用斜杠调用restTemplate吗

谢谢

代码示例:

String urlExample="www.nowhere.com/?variable={variable}";
String variable = URLEncoder.encode( "20/20", java.nio.charset.StandardCharsets.UTF_8.toString() );

Map< String, String > uriVariables = new HashMap<>();
 uriVariables.put( "variable", variable );

restTemplate.exchange( urlExample, HttpMethod.GET, new HttpEntity<>, String.class, uriVariables );
String urlExample=“www.nowhere.com/?variable={variable}”;
字符串变量=URLEncoder.encode(“20/20”,java.nio.charset.StandardCharsets.UTF_8.toString());
MapuriVariables=newhashmap();
uriVariables.put(“变量”,variable);
交换(urlExample,HttpMethod.GET,新的HttpEntity,String.class,uriVariables);
  • 如果我不执行httpEncoder,我将获得对的rest调用,并且变量get的值仅为20

  • 如果我执行httpEncoder,变量的值是%2F(这是正确的,这是我想要的值),但是当我执行rest调用时,它调用:

RestTemplate似乎编码为HttpEncoding,将%编码为%25,这中断了我的调用。有可能避免这种编码吗

已解决:

如果您指示restTemplate使用URI而不是字符串,restTemplate将避免编码


对于使用参数构建uri,最好的方法是使用UriComponentsBuilder,表明uri实际上是在build()参数中编码的。

尝试以下测试处理程序的逻辑,可以是“
www.nowhere.com/a/b/c
”,您将使用以下机制获得整个值

requestedUri = (String) 
request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);

您可以按如下方式配置RestTemplate:

DefaultUriTemplateHandler uriTemplateHandler = new UriTemplateHandler();
uriTemplateHandler.setParsePath(true);

RestTemplate restTemplate = new RestTemplate();
restTemplate.setUriTemplateHandler(uriTemplateHandler);

您是否尝试完全跳过http编码?请显示您的代码。@diginoise如何跳过http编码?我认为这是一个可能的解决方案,但我没有找到任何关于这一点的信息。编写有问题的示例。编辑您的问题并显示您正在尝试做什么。URL模板是什么样的?我知道您的代码采用控制器URL,而不是我想要编码的URL。