写在前面:这个只是问题只需要添加一个简单的配置就可以了,并且对应的代码在程序中是死的,我们只需要按照对应的格式进行编码就可以了。

本文主要解决的是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请求中文乱码问题相关推荐

  1. postmain请求中午乱码_完美解决Get和Post请求中文乱码的问题

    对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题 request.setCharacterEncoding("utf-8"); ...

  2. 完美解决Get和Post请求中文乱码的问题

    对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题 request.setCharacterEncoding("UTF-8"); ...

  3. 总结:SpringMVC 中 GET 和 POST 方式请求中的中文乱码问题

    2019独角兽企业重金招聘Python工程师标准>>> 以下是 SpringMVC 中 GET 和 POST 方式请求中的中文乱码问题的解决方法. 1,GET 方式中文乱码: 修改t ...

  4. 解决JS在url中传递参数时参数包含中文乱码的问题

    解决JS在url中传递参数时参数包含中文乱码的问题 参考文章: (1)解决JS在url中传递参数时参数包含中文乱码的问题 (2)https://www.cnblogs.com/xushengguan/ ...

  5. php gbk json_encode,php中json_encode处理gbk与gb2312中文乱码问题的解决方法

    这篇文章主要介绍了php中json_encode处理gbk与gb2312中文乱码问题的解决方法,需要的朋友可以参考下 本文讲述了php中json_encode处理gbk与gb2312中文乱码问题的解决 ...

  6. Tomcat 中 GET方式 请求 中文乱码 出现的原因

    网上很多关于GET方式请求中文乱码的解决方案,大体类似. 这里主要讲一下Tomcat在处理URL参数过程中, 究竟是为什么会导致了GET方式请求的中文乱码. 一句话概括就是: Tomcat默认将单字节 ...

  7. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 参考文章: (1)解决java web中safari浏览器下载后文件中文乱码问题 (2)https://www.cnblogs.com/ ...

  8. 在 springmvc.xml 中配置消息转换器处理 ResponseBody 中文乱码

    在 springmvc.xml 中配置消息转换器处理 ResponseBody 中文乱码 <mvc:annotation-driven><!-- 消息转换器 --><mv ...

  9. bpmn如何查看代码 idea_解决idea中Activiti的bpmn编辑器的中文乱码问题

    我使用的是idea2017+activiti6.0版本. 该文章主要是为了解决安装activiti插件后创建的流程模板中文乱码的问题. 1.安装Activiti流程编辑器插件. 1.1网上资料很多,这 ...

  10. 解决get请求中文乱码问题

    在很多情况下get请求会发生中文乱码的情况,而换做post就不会,这其中的根本原因是get请求默认的是使用"iso-8859-1"编码,接下来介绍两种种解决get请求编码的方法 1 ...

最新文章

  1. 远程ssh shell 脚本 tcgetattr: Inappropriate ioctl for device错误
  2. 如何判断链表是否有环_如何快速判断气门油封是否漏油?
  3. Keil μVision 5版新建工程详细步骤(版本2)
  4. spring中的BeanFactory与ApplicationContext的作用和区别?
  5. oracle最大实例数,【ORA-16196】一个实例在其生命周期里最多只能装载和打开一个数据库...
  6. 政考网:怎样考取公务员上岸?
  7. 7、边沿触发-D型触发器
  8. http://zhidao.baidu.com/link?url=y6eEjPtIIRZZkqTBqm55AsmfJmMLClbL_5DPQTDC3fUS6hYD9o8Iy7vrNaCUse_K9Wx
  9. JUC之集合安全问题
  10. 电脑桌面文件删除了怎么找回?
  11. 为什么优秀的程序员bug很少?因为他们……
  12. java计算机毕业设计高校四六级报名管理系统源程序+mysql+系统+lw文档+远程调试
  13. 去中心化和中心化哪个才是未来,Dex.top教你熊市生存指南
  14. 对转义字符“\”的理解
  15. 个人博客系列【Hexo】——git 使用ssh协议免密登录
  16. (六)Flutter 基础部件 TextView 和TextStyle Flutter 容器 装饰盒子 边框 圆角 阴影 形状 渐变 背景图像
  17. 项目质量管理中的新老7工具
  18. 通达oa精灵的下载步骤_通达oa精灵app下载|通达oa精灵2018官方版下载_v2.12_9ht安卓下载...
  19. 模糊神经网络-PID Smith预估集成控制系统
  20. Adobe Acrobat DC卸载更新出现问题,重装更新显示找不到源而反复出现window installer 安装失败(开机弹窗,升级不了)解决方法,亲测有效!!!

热门文章

  1. Android关闭输入法键盘
  2. 书店管理系统(C++初学者友好版)
  3. CF1041D Glider
  4. js基础-18-js中创建对象的几种方式
  5. mysql5.7.13编译安装_编译安装MySQL-5.7.13
  6. 天体运行轨迹_都说运动是天体的基本特性,那么银河系是绕着什么运动的呢?...
  7. c语言试讲课程,《C语言程序设计教程》试讲教案.doc
  8. oracle 字段对错,oracle 两表之间字段赋值错误解析
  9. hql 占位符_hibernate中如何使用占位符拼接HQL
  10. Mybatis快速入门并实现CRUD操作