Java Spring resttemplate字符编码

我正在使用Java Spring Resttemplate通过get请求获取json。 我得到的JSON不是特殊字符,而是someö或ß一些奇怪的东西。 所以我猜这个字符编码有些不对劲。 我在互联网上找不到任何帮助。 我现在使用的代码是:

String json = restTemplate.getForObject( overPassStatementPostCode, String.class, params); 

您只需要将StringHttpMessageConverter添加到模板的消息转换器中:

 RestTemplate template = new RestTemplate(); template.getMessageConverters() .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); ResponseEntity response = template.exchange(endpoint, method, entity, Object.class); 

首先我尝试了@beerbajay的方式,但它没有帮助。最后我通过以下方式解决它

  RestTemplate template = new RestTemplate(); // template.getMessageConverters() // .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); HttpHeaders headers = new HttpHeaders(); headers.setAccept(newArrayList(MediaType.APPLICATION_JSON)); ResponseEntity response = template.exchange(url, HttpMethod.GET, new HttpEntity(headers), String.class); 

我在这个问题上遇到同样的问题,经过一次搜索,我得到了这个链接: https : //gist.github.com/knight1128/66f3e4817ab35c7397fd

它的解决方法对我有用:

 package com.google.locationlab; import com.google.common.collect.Lists; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; import org.springframework.http.*; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; import java.nio.charset.Charset; import java.util.List; public class PortalRestTemplateIntegrationTest { private Log logger = LogFactory.getLog(PortalRestTemplateIntegrationTest.class); @Test public void test() throws Exception { RestTemplate restTemplate = new RestTemplate(); HttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8")); List> httpMessageConverter = Lists.newArrayList(); httpMessageConverter.add(stringHttpMessageConverter); restTemplate.setMessageConverters(httpMessageConverter); URI targetUrl= UriComponentsBuilder.fromUriString("http://portal.net") .path("search") .queryParam("q", "잠실역") .build() .toUri(); HttpHeaders headers = new HttpHeaders(); Charset utf8 = Charset.forName("UTF-8"); MediaType mediaType = new MediaType("text", "html", utf8); headers.setContentType(mediaType); headers.set("User-Agent", "mozilla"); headers.set("Accept-Language", "ko"); // gzip 사용하면 byte[] 로 받아서, 압축을 풀고 decoding 해야 한다. HttpEntity entity = new HttpEntity("parameters", headers); ResponseEntity responseEntity = restTemplate.exchange(targetUrl.toURL().toString(), HttpMethod.GET, entity, String.class); String result = responseEntity.getBody(); logger.info(result); } }