【Java SpringBoot】RestTemplate使用postForObject发送请求,接收String类型的response时中文乱码
https://blog.csdn.net/qq_43758789/article/details/120576717
使用RestTemplate发送PostForObject的时候会出现乱码。这是因为因为 HttpMessageConverter 构造器中的 StringHttpMessageConverter 默认为"ISO-8859-1"。

然而,我们需要的编码规则可能是“UTF-8”。 如何修改默认的编码呢?
方法一:遍历修改每一个集合的编码
其中一种方法,就是将每个集合的默认,创建对应的工具类方法如下:
1 import org.springframework.http.converter.HttpMessageConverter;
2 import org.springframework.http.converter.StringHttpMessageConverter;
3 import org.springframework.web.client.RestTemplate;
4
5 import java.nio.charset.Charset;
6 import java.util.List;
7
8 /**
9 * HTTP请求模板工具栏
10 */
11 public class RestTemplateUtils extends RestTemplate {
12 /**
13 * HTTP模板编码
14 * @param charset 编码名称(如utf-8)
15 * @return
16 */
17 public static RestTemplate getInstance(String charset) {
18 RestTemplate restTemplate = new RestTemplate();
19 List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
20 for (HttpMessageConverter<?> httpMessageConverter : list) {
21 if (httpMessageConverter instanceof StringHttpMessageConverter) {
22 ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName(charset));
23 break;
24 }
25 }
26 return restTemplate;
27 }
28 }
调用例子。
RestTemplate restTemplate = RestTemplateUtils.getInstance("UTF-8");
// …… 请求头和返回方法
String result = restTemplate.postForObject (url, entity, String.class);
此时,我们发现,编码已经更改为“UTF-8”。

方法二: 修改头部集合的模板编码
创建工具类方法如下:
1 /**
2 * 获取HTTP模板编码
3 * @param charset
4 * @return
5 */
6 public static RestTemplate setRestemplateCharact(Charset charset){
7 RestTemplate restTemplate = new RestTemplate();
8 restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(charset));
9 return restTemplate;
10 }
调用例子:
RestTemplate restTemplate = RestTemplateUtils.setRestemplateCharact(StandardCharsets.UTF_8);
// …… 请求头和返回方法
String result = restTemplate.postForObject (url, entity, String.class);
调用后,我们发现编码已经更改为“UTF-8”。

【Java SpringBoot】RestTemplate使用postForObject发送请求,接收String类型的response时中文乱码的更多相关文章
- 项目总结22:Java UDP Socket数据的发送和接收
项目总结22:Java UDP Socket数据的发送和接收 1-先上demo 客户端(发送数据) package com.hs.pretest.udp; import java.io.IOExcep ...
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...
- GET请求和POST请求的request和response的中文乱码问题
GET请求(request)中文乱码解决方案: 在Services的server.xml的配置文件的第一个Connector标签中添加属性URIEncoding="UTF-8" P ...
- Java基础教程——模拟浏览器发送请求
JAVA访问网页 分别测试使用get和post方法访问网页,可以收到服务器的请求,并写入到html文件中. import java.io.*; import java.net.*; import ja ...
- spring MVC 管理HttpClient---实现在java中直接向Controller发送请求
在spring MVC中,大多数时候是由客户端的页面通过ajax等方式向controller发送请求,但有时候需要在java代码中直接向controller发送请求,这时可以使用HttpCilent实 ...
- 使用HttpClient发送请求接收响应
1.一般需要如下几步:(1) 创建HttpClient对象.(2)创建请求方法的实例,并指定请求URL.如果需要发送GET请求,创建HttpGet对象:如果需要发送POST请求,创建HttpPost对 ...
- Response ServletContext 中文乱码 Request 编码 请求行 共享数据 转发重定向
Day35 Response 1.1.1 ServletContext概念 u 项目的管理者(上下文对象),服务器启动时,会为每一个项目创建一个对应的ServletContext对象. 1.1.2 ...
- java动手动脑和课后实验型问题String类型
1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请 ...
- [转]解决GET请求时中文乱码的问题
原文地址:http://www.cnblogs.com/liukemng/p/4178882.html 之前项目中的web.xml中的编码设置: <filter> <filter-n ...
- 使用SpringMVC参数传递时,解决get请求时中文乱码的问题
问题描述: 使用SpringMVC参数传递时, 遇到get请求中文信息时,页面应答会显示中文乱码. 解决办法: 一, 我们需要把request.getParameter(“参数名”)获取到的字符串先 ...
随机推荐
- OpenMP Parallel Construct 实现原理与源码分析
OpenMP Parallel Construct 实现原理与源码分析 前言 在本篇文章当中我们将主要分析 OpenMP 当中的 parallel construct 具体时如何实现的,以及这个 co ...
- Entrypoint undefined = index.html html-webpack-plugin 错误ERROR in Error: Child compilation failed: Module build failed (from ./node_modules/html-webpack-plu SyntaxError: Unexpected token )
Entrypoint undefined = index.html html-webpack-plugin 错误 ERROR in Error: Child compilation failed: M ...
- DVWA系列3:CSRF
DVWA系列3:CSRF 前言 CSRF(Cross-site request forgery),即跨站请求伪造,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法. 比如说,用户 ...
- Hive删除分区名称中含有特殊字符
先说方案:通过show partitions和hdfs url看到的都不是真正的分区名称,都是经过URI重新编码的,访问这些分区应该使用分区名称的原始字符串. 场景描述 当我们在SQL语句中使用变量时 ...
- 算法学习笔记(17): 快速傅里叶变换(FFT)
快速傅里叶变换(FFT) 有趣啊,都已经到NOI的难度了,救命 首先,我们先讲述一下前置知识.已经明白的读者请移步后文 虚数 定义:\(z = a + bi\),其中 \(a, b \in R\ \ ...
- visual studio(vs2017、vs2019)离线安装包下载、制作
一.下载安装引导程序(以vs-professional-2019为例) https://aka.ms/vs/16/release/vs_professional.exe 二.在引导程序目录打开cmd命 ...
- 运行第一个Go文件
Go学习(1)一. 使用GoLand运行第一个Go文件 目录 Go学习(1)一. 使用GoLand运行第一个Go文件 前言 一.创建项目 二.编辑运行/调试配置 三.编写并运行代码 总结 前言 Go语 ...
- vue3 setup语法糖下,vue自定义指令的实现,以及指令全局挂载,自定义v-loading的实现
最近一段时间,在做h5的移动端项目,UI组件库使用的vant,vant组件中的loading实在难用,无法包裹某个块进行loading,也无法对非组件的标签进行loading,所以想着自定义写个指令, ...
- 郁金香逆向 2.便利怪物对象数组 纯C写法
读取基础地址 获取节点数量 打印怪物列表 进行遍历 环环相扣
- appium 在linux安装和使用(持续更新)
appium V1.10 centos7.4 安装 安装步骤 1. 安装node 为了得到npm(node package manager,nodejs的安装包管理工具,可以通过npm来下载appiu ...