Java Spring resttemplate 字符编码
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27603782/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java Spring resttemplate character encoding
提问by Shachty
I'm using the Java Spring Resttemplate for getting a json via a get request. The JSON I'm getting has instead of special character slike ü ? ? or ? some weird stuff. So I guess somethings wrong with the character encoding. I can't find any help on the internet. The code I'm using for now is:
我正在使用 Java Spring Resttemplate 通过 get 请求获取 json。我得到的 JSON 而不是像 ü 这样的特殊字符?? 或者 ?一些奇怪的东西。所以我猜字符编码有问题。我在互联网上找不到任何帮助。我现在使用的代码是:
String json = restTemplate.getForObject(
overPassStatementPostCode,
String.class,
params);
采纳答案by beerbajay
You just need to add the StringHttpMessageConverter
to the template's message converters:
您只需要将 加入StringHttpMessageConverter
到模板的消息转换器中:
RestTemplate template = new RestTemplate();
template.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
ResponseEntity<Object> response = template.exchange(endpoint, method, entity,
Object.class);
回答by zhuguowei
First I tried @beerbajay 's way , but it not helps。 Finally I resolve it by below way
首先我尝试了@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<String> response = template.exchange(url, HttpMethod.GET, new HttpEntity<String>(headers), String.class);
回答by KentChow
I've same issue on this case, after one search, I've got this link: https://gist.github.com/knight1128/66f3e4817ab35c7397fd
我在这种情况下遇到了同样的问题,经过一次搜索,我得到了这个链接:https: //gist.github.com/knight1128/66f3e4817ab35c7397fd
its workaround is working for me:
它的解决方法对我有用:
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<?>> 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<String> entity = new HttpEntity<String>("parameters", headers);
ResponseEntity<String> responseEntity = restTemplate.exchange(targetUrl.toURL().toString(), HttpMethod.GET, entity, String.class);
String result = responseEntity.getBody();
logger.info(result);
}
}
回答by Khany Liegh
I have solved this problem. I need to POST a string object in request body with UTF-8.
我已经解决了这个问题。我需要使用 UTF-8 在请求正文中发布一个字符串对象。
text/plain
文本/普通
httpHeaders.setContentType(new MediaType("text", "plain", StandardCharsets.UTF_8));
httpHeaders.setContentType(new MediaType("text", "plain", StandardCharsets.UTF_8));
applicaton/json
应用程序/json
httpHeaders.setContentType(new MediaType("applicaton", "json", StandardCharsets.UTF_8));
httpHeaders.setContentType(new MediaType("applicton", "json", StandardCharsets.UTF_8));
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> resposeEntity = null;
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(new MediaType("text", "plain", StandardCharsets.UTF_8));
HttpEntity<String> httpEntity = new HttpEntity<String>(stringContent, httpHeaders);
responseEntity = restTemplate.exchange(requestUrl, HttpMethod.POST, httpEntity, String.class);
if (HttpStatus.OK.equals(responseEntity.getStatusCode())) {
logger.debug("... success ... result: " + responseEntity.getBody());
}