RestTemplate将getForObject特殊字符转换为URL参数

时间:2016-02-09 22:47:38

标签: java spring spring-mvc encoding resttemplate

当我尝试使用GET调用端点并将参数传递到具有特殊字符(如'ñ')的URL时,我遇到了问题:

示例:

parameters.add("name", "Añisc");
Person person = rest.getForObject(url.toUri(), Person.class, parameters);

返回:

Error 502, Bad gateway

我一直在阅读可能的解决方案,但没有一个适合我。如何以物业方式发送特殊字符?我认为getForObject和url.toUri做了必要的编码......

我尝试将以下内容添加到tomcat配置中,但没有运气:

URIEncoding="UTF-8"

2 个答案:

答案 0 :(得分:0)

也许您可以使用RestTemplate的其他方法:

    final String oUrl = "http://myhost/name/{name}";
    final URI expanded = new UriTemplate(url).expand("Añisc");
    final String fUrl = URLDecoder.decode(expanded.toString(), "UTF-8");
    restTemplate.getForObject(fUrl, Object.class);

我的意思是,自己解释网址并输入您想要的编码。

答案 1 :(得分:0)

试试这个

String query = "Añisc";
String uri = "http://localhost:8081/"; // example
String path = "name" //example

URI targetUrl = UriComponentsBuilder.fromUriString(url)
            .path(path)
            .queryParam("name", query)
            .build()
            .toUri();

restTemplate.getForObject(targetUrl, Person.class);