我正在使用Java Spring Resttemplate通过get请求获取json。我得到的JSON不是特殊字符,而是someöä或ß一些奇怪的东西。所以我猜这个字符编码有些不对劲。我在互联网上找不到任何帮助。我现在使用的代码是:
String json = restTemplate.getForObject(
overPassStatementPostCode,
String.class,
params);
答案 0 :(得分:65)
您只需将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);
答案 1 :(得分:1)
首先我尝试了@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);
答案 2 :(得分:1)
我在这个问题上遇到同样的问题,经过一次搜索,我得到了这个链接: https://gist.github.com/knight1128/66f3e4817ab35c7397fd
它的解决方法对我有用:
apply
答案 3 :(得分:0)
我已经解决了这个问题。我需要使用UTF-8在请求正文中发布一个字符串对象。
文本/纯文本
httpHeaders.setContentType(new MediaType(“ text”,“ plain”,StandardCharsets.UTF_8));
applicaton / json
httpHeaders.setContentType(new MediaType(“ applicaton”,“ 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());
}
答案 4 :(得分:0)
如果可以执行以下操作,则仍然可以将String.class用作响应类型。
升级到spring-web 5.2解决了该问题。或将writeAcceptCharset属性设置为false属于StringHttpMessageConverter,并在RestTemplate实例中进一步使用该转换器。
boolean writeAcceptCharSet = false;
List<HttpMessageConverter<?>> c = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> mc : c) {
if (mc instanceof StringHttpMessageConverter) {
StringHttpMessageConverter mcc = (StringHttpMessageConverter) mc;
mcc.setWriteAcceptCharset(writeAcceptCharSet);
}
}