RestTemplate调用接口返回中文乱码

简介: RestTemplate调用接口返回中文乱码

现象描述

使用RestTemplate 发送http请求,调用接口,返回的结果中,出现中文乱码情况

代码片段

ResponseEntity<String> response = restTemplate.getForEntity(oraPatrolItemListUrl, String.class);
String body = response.getBody();
System.out.println(body);

问题查找

找到RestTemplate 的初始化配置类

@Configuration
public class RestTemplateConfig{
  private int timeoutms = 5 * 60 *1000;
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);;
    }
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(timeoutms);//ms
        factory.setConnectTimeout(timeoutms);//ms
        return factory;
    }
}

需要对该配置类进行改造一下哦

具体改造方法

方式一(推荐):

package com.xxl.job.executor.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
import java.util.List;
@Configuration
public class RestTemplateConfig{
  private int timeoutms = 5 * 60 *1000;
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        RestTemplate restTemplate = new RestTemplate(factory);
        List<HttpMessageConverter<?>> converterList =restTemplate.getMessageConverters();
        int converterIndex = -1;
        for (int i=0;i<converterList.size();i++){
            if(converterList.get(i).getClass() == StringHttpMessageConverter.class){
                converterIndex = i;
                break;
            }
        }
        if(converterIndex !=-1) {
            restTemplate.getMessageConverters().set(converterIndex, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        }
        return restTemplate;
    }
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(timeoutms);//ms
        factory.setConnectTimeout(timeoutms);//ms
        return factory;
    }
}

方式二:(简单版,不推荐)

@Configuration
public class RestTemplateConfig{
  private int timeoutms = 5 * 60 *1000;
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        RestTemplate restTemplate = new RestTemplate(factory);
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        return restTemplate;
    }
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(timeoutms);//ms
        factory.setConnectTimeout(timeoutms);//ms
        return factory;
    }
}

改造完成之后,在调用一下接口,发现不再乱码了


相关文章
|
Java 微服务 Spring
FeignClient GET请求方式无法解析对象参数
FeignClient GET请求方式无法解析对象参数,报java.lang.IllegalArgumentException: method GET must not have a request body
798 0
|
JSON 数据格式
Feign调用文件下载服务接口实例
Feign调用文件下载服务接口实例
1240 0
Feign调用文件下载服务接口实例
|
3月前
|
Java Spring 容器
基于RestTemplate扩展,支持Get请求传递javaBean参数
本文介绍了如何扩展RestTemplate以支持在GET请求中传递JavaBean参数的问题。在项目中,作者发现使用RestTemplate进行GET请求时,不能直接传递JavaBean作为参数,而需要手动将参数拼接到URL中,这种方法不仅繁琐而且容易出错
基于RestTemplate扩展,支持Get请求传递javaBean参数
Kam
|
Java Maven
Feign调用把GET请求自动转成POST请求解决:Request method 'POST' not supported
Feign调用把GET请求自动转成POST请求解决:Request method 'POST' not supported
Kam
2100 0
|
6月前
|
Java
关于RestTemplate postForObject方法请求 服务端Controller接受不到值的问题解决
关于RestTemplate postForObject方法请求 服务端Controller接受不到值的问题解决
115 0
关于RestTemplate postForObject方法请求 服务端Controller接受不到值的问题解决
|
缓存
RestTemplate请求访问简单使用
RestTemplate请求访问简单使用
93 1
|
6月前
RestTemplate 根据传参 返回 对象
RestTemplate 根据传参 返回 对象
|
JSON Java fastjson
restTemplate 调用第三方接口获取json数据
restTemplate 调用第三方接口获取json数据
|
Java Apache 网络架构
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)(上)
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)
HTTP请求处理 get/post工具类 验证网络DEMO
HTTP请求处理 get/post工具类 验证网络DEMO
67 0