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 Apache
Java中文乱码浅析及解决方案
Java中文乱码浅析及解决方案
480 0
|
XML JSON 人工智能
Error while extracting response for type [class xxx] and content type application/xml;charset=UTF-8
Error while extracting response for type [class xxx] and content type application/xml;charset=UTF-8
2541 0
|
JSON Java Maven
接口调用神器RestTemplate(四)
接口调用神器RestTemplate
311 1
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
1019 2
|
XML Java Maven
WebService客户端调用的5种常见方式
本文介绍了在Java中创建和调用WebService的方法,包括服务端的搭建、配置类的添加以及客户端的多种调用方式(如使用JDK原生代码、wsimport命令、动态调用、代理工厂及HttpClient)。文中详细展示了每种方法的实现步骤和示例代码,强调了服务端与客户端参数实体类字段的兼容性,并推荐使用代理工厂方式进行调用。
3432 0
WebService客户端调用的5种常见方式
|
Java Spring 容器
基于RestTemplate扩展,支持Get请求传递javaBean参数
本文介绍了如何扩展RestTemplate以支持在GET请求中传递JavaBean参数的问题。在项目中,作者发现使用RestTemplate进行GET请求时,不能直接传递JavaBean作为参数,而需要手动将参数拼接到URL中,这种方法不仅繁琐而且容易出错
基于RestTemplate扩展,支持Get请求传递javaBean参数
|
JSON Cloud Native Java
解决Jackson解析JSON时出现的Illegal Character错误
解决Jackson解析JSON时出现的Illegal Character错误
1828 0
|
Java API Spring
spring boot中Excel文件下载踩坑大全
spring boot中Excel文件下载踩坑大全
2712 2
spring boot中Excel文件下载踩坑大全
|
JSON Java 数据格式
如何优雅的使用 RestTemplate
如何优雅的使用 RestTemplate
SpringBoot读取配置文件内容,获取数据
SpringBoot读取配置文件内容,获取数据