Java Spring resttemplate character encoding

后端 未结 5 492
甜味超标
甜味超标 2020-12-05 10:29

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

5条回答
  •  抹茶落季
    2020-12-05 10:47

    I've same issue on this case, after one search, I've got this link: 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 = 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);
    
        }
    }
    

提交回复
热议问题