首页 > 其他分享 >SpringMVC 中中文乱码解决

SpringMVC 中中文乱码解决

时间:2023-08-22 21:56:09浏览次数:45  
标签:中文 String get SpringMVC request 乱码 values parameterMap public

请求中文乱码

  • 在web.xml中配置spring自带的过滤器org.springframework.web.filter.CharacterEncodingFilter,只可以解决请求
<!--  spring 自带的解决中文乱码的filter -->
  <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>
    </init-param>
  </filter>

  • 也可以自己写一个过滤器,注册在web.xml中,以下代码过滤器可以解决请求和响应的中文乱码问题
/**
* 解决get和post请求 全部乱码的过滤器
*/
public class GenericEncodingFilter implements Filter {

   @Override
   public void destroy() {
  }

   @Override
   public 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);
  }

   @Override
   public 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;
  }

   // 对需要增强方法 进行覆盖
   @Override
   public 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();
  }

   //取一个值
   @Override
   public String getParameter(String name) {
       Map<String, String[]> parameterMap = getParameterMap();
       String[] values = parameterMap.get(name);
       if (values == null) {
           return null;
      }
       return values[0]; // 取回参数的第一个值
  }

   //取所有值
   @Override
   public String[] getParameterValues(String name) {
       Map<String, String[]> parameterMap = getParameterMap();
       String[] values = parameterMap.get(name);
       return values;
  }
}

响应

  • //produces:指定响应体返回类型和编码@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")

  • 使用spring自带的响应配置,可以在springmvc的配置文件上添加一段消息StringHttpMessageConverter转换配置!

<mvc:annotation-driven>
   <mvc:message-converters register-defaults="true">
       <bean class="org.springframework.http.converter.StringHttpMessageConverter">
           <constructor-arg value="UTF-8"/>
       </bean>
       <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
           <property name="objectMapper">
               <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                   <property name="failOnEmptyBeans" value="false"/>
               </bean>
           </property>
       </bean>
   </mvc:message-converters>
</mvc:annotation-driven>

标签:中文,String,get,SpringMVC,request,乱码,values,parameterMap,public
From: https://www.cnblogs.com/maoshine/p/17649781.html

相关文章

  • Hello, SpringMVC
    springMVC的执行流程 具体流程(1)当用户通过浏览器发起一个HTTP请求,请求直接到前端控制器DispatcherServlet;(2)前端控制器接收到请求以后调用处理器映射器HandlerMapping,处理器映射器根据请求的URL找到具体的Handler,并将它返回给前端控制器;(3)前端控制器调用处理器适配器Handle......
  • Java Web中出现的一些乱码问题总结(详解)
    三、JavaWeb中出现的一些乱码问题总结(详解) 一、response.getWriter().write()和response.getWriter().print()的区别response.getWriter()返回的是PrintWriter,这是一个打印输出流response.getWriter().write()和response.getWriter().print()是响应给客户端的东西,如果不用......
  • Visual Studio 智能提示、注释是英文,改为中文
     最近建立一个新项目准备写一个小demo,新建项目时选的时.Net7。写代码的时候发现。Net7没有系统的中文注释,去官网下载的时候发现没有关于.Net7的汉化文件包,最新的汉化包是。Net5的,可能是我没找到,我这里是把.Net5汉化包放到了.Net7下面了,测试好用。一、.NETFramework打开文......
  • QuarkXPress 2023(版面编辑设计) 19.2(55820)中文版
    QuarkXPress2023是Quark公司推出的一款专业的排版和设计软件。它是QuarkXPress系列的最新版本,引入了许多令人兴奋的功能和改进。点击获取QuarkXPress2023 下面将详细介绍QuarkXPress2023的主要特点和优势。多通道混合:QuarkXPress2023具备了独特的多通道混合功能。用户......
  • [Mac软件]Pixelmator Pro 3.3.12 专业图像编辑中文版
    PixelmatorPro是专为Mac设计的功能强大,美观且易于使用的图像编辑器。借助广泛的专业级无损图像编辑工具,PixelmatorPro可使您发挥出最佳的照片效果,创建华丽的构图和设计,绘制,绘画,应用令人惊叹的效果,设计精美的文字并仅编辑图像您可以想象的任何方式。而且,由于其直观且易于访问的......
  • Unity TextMeshPro使用自建中文字体
    TextMeshPro  TextMeshPro是Unity新一代字体,是Unity的最终文本解决方案。它是UnityUIText和旧版TextMesh的完美替代方案。功能强大、易于使用、性能高效。目前TextMeshPro对中文的支持也还可以,不过默认不能用,需要自己成生成。  本文就介绍TextMeshPro中文字体文件的......
  • ElementUI图标icon乱码问题
    如题:ELementUI图标icon乱码问题原因:在build编译时编译器处理导致的解决方案方案一:将saas更换为node-saas,安装不了问题可查看这里方案二:升级saas和sass-loader方案三:将element引入的样式代码注释,然后再main.js添加一行引入样式代码注释代码:import'~element-ui/packages/t......
  • 解决pytest html报告中文乱码的问题
    pytest-html指定版本3.1.1即可解决pipinstallpytest-html==3.1.1    ......
  • Web_PHP_MySQL_XAMPP下MYSQL中文乱码问题的解决
    1、找到xampp安装目录下的D:\xampp\mysql\bin\my.ini文件并打开; 2、找到标记[mysqld]和标记[mysql]两处; 3、在这2处标记下分别添加编码配置信息:default-character-set=gbk;修改后如下:->Ini代码 [mysql] no-auto-rehash default-character-set=gbk  [mysql......
  • Web_PHP_PHPsubstr截取中文字符出现乱码解决;
          PHPsubstr截取中文字符时通常会出现乱码,我们可以通过使用mbstring扩展库的mb_substr截取;自己书写截取函数等方式来解决这一问题。      substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_sub......