休息模板与乌里巴拉姆的斜线

时间:2018-06-11 14:19:40

标签: rest spring-mvc spring-boot resttemplate slash

我正在与RestTemplate进行REST调用,并且我有一个包含斜杠的uriparam(即20/20)

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

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

可以在param中使用斜杠调用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 );

似乎RestTemplate编码为HttpEncoding%to%25并且它打破了我的呼叫。可以避免这种编码吗?

解决:

如果指示restTemplate使用URI而不是String,则RestTemplate会避免编码。

为了使用params构建uri,最好的方法是使用UriComponentsBuilder指示uri实际上是在build()参数中编码的。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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