SpringMVC中解决POST和GET请求中文乱码问题
写在前面:这个只是问题只需要添加一个简单的配置就可以了,并且对应的代码在程序中是死的,我们只需要按照对应的格式进行编码就可以了。
本文主要解决的是POST和GET两种请求方式,希望对你有帮助!!!
文章目录
- 1、POST乱码
- 1.1、在web.xml中配置
- 1.2、具体的处理方式
- 2、GET乱码
- 2.1、在tomcat服务器中添加编码
- 3、使用一个万能的配置类(解决POST和GET)
1、POST乱码
1.1、在web.xml中配置
SpringMVC中,其为我们提供了过滤器CharacterEncodingFilter类
在该类中,有一个核心的方法:
public class CharacterEncodingFilter extends OncePerRequestFilter {...@Nullableprivate String encoding;private boolean forceRequestEncoding = false;private boolean forceResponseEncoding = false;@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {String encoding = getEncoding();if (encoding != null) {if (isForceRequestEncoding() || request.getCharacterEncoding() == null) {request.setCharacterEncoding(encoding);}if (isForceResponseEncoding()) {response.setCharacterEncoding(encoding);}}filterChain.doFilter(request, response);}
}
我们只需要对该类中的核心的方法进行对应的配置,就可以完成对应的POST请求中文乱码
1.2、具体的处理方式
配置方式,在web.xml中添加下面的配置代码:
<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value><!-- 后面这两个可以不用添加 --><param-name>forceEncoding</param-name><param-value>true</param-value></init-param>
</filter>
<filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
2、GET乱码
2.1、在tomcat服务器中添加编码
apache-tomcat-8.5.37 --> conf --> server.xml
在第一个Connector标签中,添加对应的UTF编码
<Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
3、使用一个万能的配置类(解决POST和GET)
编写对应的过滤器类,然后在web.xml中配置这个过滤器即可!
package com.kuang.filter;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;/*** 解决get和post请求 全部乱码的过滤器*/
public class GenericEncodingFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//处理response的字符编码HttpServletResponse myResponse=(HttpServletResponse) response;myResponse.setContentType("text/html;charset=UTF-8");// 转型为与协议相关对象HttpServletRequest httpServletRequest = (HttpServletRequest) request;// 对request包装增强HttpServletRequest myrequest = new MyRequest(httpServletRequest);chain.doFilter(myrequest, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}}//自定义request对象,HttpServletRequest的包装类
class MyRequest extends HttpServletRequestWrapper {private HttpServletRequest request;//是否编码的标记private boolean hasEncode;//定义一个可以传入HttpServletRequest对象的构造函数,以便对其进行装饰public MyRequest(HttpServletRequest request) {super(request);// super必须写this.request = request;}// 对需要增强方法 进行覆盖@Overridepublic Map getParameterMap() {// 先获得请求方式String method = request.getMethod();if (method.equalsIgnoreCase("post")) {// post请求try {// 处理post乱码request.setCharacterEncoding("utf-8");return request.getParameterMap();} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else if (method.equalsIgnoreCase("get")) {// get请求Map<String, String[]> parameterMap = request.getParameterMap();if (!hasEncode) { // 确保get手动编码逻辑只运行一次for (String parameterName : parameterMap.keySet()) {String[] values = parameterMap.get(parameterName);if (values != null) {for (int i = 0; i < values.length; i++) {try {// 处理get乱码values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}}hasEncode = true;}return parameterMap;}return super.getParameterMap();}//取一个值@Overridepublic String getParameter(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);if (values == null) {return null;}return values[0]; // 取回参数的第一个值}//取所有值@Overridepublic String[] getParameterValues(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);return values;}
}
SpringMVC中解决POST和GET请求中文乱码问题相关推荐
- postmain请求中午乱码_完美解决Get和Post请求中文乱码的问题
对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题 request.setCharacterEncoding("utf-8"); ...
- 完美解决Get和Post请求中文乱码的问题
对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题 request.setCharacterEncoding("UTF-8"); ...
- 总结:SpringMVC 中 GET 和 POST 方式请求中的中文乱码问题
2019独角兽企业重金招聘Python工程师标准>>> 以下是 SpringMVC 中 GET 和 POST 方式请求中的中文乱码问题的解决方法. 1,GET 方式中文乱码: 修改t ...
- 解决JS在url中传递参数时参数包含中文乱码的问题
解决JS在url中传递参数时参数包含中文乱码的问题 参考文章: (1)解决JS在url中传递参数时参数包含中文乱码的问题 (2)https://www.cnblogs.com/xushengguan/ ...
- php gbk json_encode,php中json_encode处理gbk与gb2312中文乱码问题的解决方法
这篇文章主要介绍了php中json_encode处理gbk与gb2312中文乱码问题的解决方法,需要的朋友可以参考下 本文讲述了php中json_encode处理gbk与gb2312中文乱码问题的解决 ...
- Tomcat 中 GET方式 请求 中文乱码 出现的原因
网上很多关于GET方式请求中文乱码的解决方案,大体类似. 这里主要讲一下Tomcat在处理URL参数过程中, 究竟是为什么会导致了GET方式请求的中文乱码. 一句话概括就是: Tomcat默认将单字节 ...
- 解决java web中safari浏览器下载后文件中文乱码问题
解决java web中safari浏览器下载后文件中文乱码问题 参考文章: (1)解决java web中safari浏览器下载后文件中文乱码问题 (2)https://www.cnblogs.com/ ...
- 在 springmvc.xml 中配置消息转换器处理 ResponseBody 中文乱码
在 springmvc.xml 中配置消息转换器处理 ResponseBody 中文乱码 <mvc:annotation-driven><!-- 消息转换器 --><mv ...
- bpmn如何查看代码 idea_解决idea中Activiti的bpmn编辑器的中文乱码问题
我使用的是idea2017+activiti6.0版本. 该文章主要是为了解决安装activiti插件后创建的流程模板中文乱码的问题. 1.安装Activiti流程编辑器插件. 1.1网上资料很多,这 ...
- 解决get请求中文乱码问题
在很多情况下get请求会发生中文乱码的情况,而换做post就不会,这其中的根本原因是get请求默认的是使用"iso-8859-1"编码,接下来介绍两种种解决get请求编码的方法 1 ...
最新文章
- 远程ssh shell 脚本 tcgetattr: Inappropriate ioctl for device错误
- 如何判断链表是否有环_如何快速判断气门油封是否漏油?
- Keil μVision 5版新建工程详细步骤(版本2)
- spring中的BeanFactory与ApplicationContext的作用和区别?
- oracle最大实例数,【ORA-16196】一个实例在其生命周期里最多只能装载和打开一个数据库...
- 政考网:怎样考取公务员上岸?
- 7、边沿触发-D型触发器
- http://zhidao.baidu.com/link?url=y6eEjPtIIRZZkqTBqm55AsmfJmMLClbL_5DPQTDC3fUS6hYD9o8Iy7vrNaCUse_K9Wx
- JUC之集合安全问题
- 电脑桌面文件删除了怎么找回?
- 为什么优秀的程序员bug很少?因为他们……
- java计算机毕业设计高校四六级报名管理系统源程序+mysql+系统+lw文档+远程调试
- 去中心化和中心化哪个才是未来,Dex.top教你熊市生存指南
- 对转义字符“\”的理解
- 个人博客系列【Hexo】——git 使用ssh协议免密登录
- (六)Flutter 基础部件 TextView 和TextStyle Flutter 容器 装饰盒子 边框 圆角 阴影 形状 渐变 背景图像
- 项目质量管理中的新老7工具
- 通达oa精灵的下载步骤_通达oa精灵app下载|通达oa精灵2018官方版下载_v2.12_9ht安卓下载...
- 模糊神经网络-PID Smith预估集成控制系统
- Adobe Acrobat DC卸载更新出现问题,重装更新显示找不到源而反复出现window installer 安装失败(开机弹窗,升级不了)解决方法,亲测有效!!!
热门文章
- Android关闭输入法键盘
- 书店管理系统(C++初学者友好版)
- CF1041D Glider
- js基础-18-js中创建对象的几种方式
- mysql5.7.13编译安装_编译安装MySQL-5.7.13
- 天体运行轨迹_都说运动是天体的基本特性,那么银河系是绕着什么运动的呢?...
- c语言试讲课程,《C语言程序设计教程》试讲教案.doc
- oracle 字段对错,oracle 两表之间字段赋值错误解析
- hql 占位符_hibernate中如何使用占位符拼接HQL
- Mybatis快速入门并实现CRUD操作