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

回到顶部