Подтвердить что ты не робот

Java Spring кодировка символов resttemplate

Я использую ретранслятор Java Spring для получения json через запрос на получение. У JSON, который я получаю, вместо специального символа slike ü ö ä или ß какой-то странный материал. Поэтому я предполагаю, что что-то не так с кодировкой символов. Я не могу найти помощь в Интернете. Код, который я использую сейчас:

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

Ответ 1

Вам просто нужно добавить 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);

Ответ 2

Сначала я попробовал метод @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);

Ответ 3

У меня такая же проблема в этом случае, после одного поиска у меня есть эта ссылка: 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);

    }
}