Spring RestTemplate URL编码
我尝试使用springs resttemplate做一个简单的rest调用:
private void doLogout(String endpointUrl, String sessionId) { template.getForObject("http://{enpointUrl}?method=logout&session={sessionId}", Object.class,
endpointUrl, sessionId);
}
其中endpointUrl变量包含诸如service.host.com/api/service.php之类的内容
不幸的是,我的呼叫导致org.springframework.web.client.ResourceAccessException:I /
O错误:service.host.com%2Fapi%2Fservice.php
因此,spring似乎在创建url之前先编码了我的endpointUrl字符串。有没有一种简单的方法可以防止弹簧这样做?
问候
回答:
没有简单的方法可以做到这一点。URI模板变量通常用于路径元素或查询字符串参数。您正在尝试通过主机。理想情况下,您会发现用于构建URI的更好的解决方案。我建议Yuci的解决方案。
如果您仍想使用Spring实用程序和模板扩展,一种解决方法是使用UriTemplate
具有URI变量的URL来生成URL,然后对其进行URL解码并将其传递给RestTemplate
。
String url = "http://{enpointUrl}?method=logout&session={sessionId}";URI expanded = new UriTemplate(url).expand(endpointUrl, sessionId); // this is what RestTemplate uses
url = URLDecoder.decode(expanded.toString(), "UTF-8"); // java.net class
template.getForObject(url, Object.class);
以上是 Spring RestTemplate URL编码 的全部内容, 来源链接: utcz.com/qa/412562.html