Java Spring resttemplate 字符编码

新手上路,请多包涵

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

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

原文由 Shachty 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 623
2 个回答

您只需将 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);

原文由 beerbajay 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在这种情况下有同样的问题,经过一番搜索,我得到了这个链接: 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<?>> 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);

    }
}

原文由 KentChow 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题