zoukankan      html  css  js  c++  java
  • Spring 配置请求过滤器,编码格式设为UTF-8,避免中文乱码

     1 <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码-->
     2     <filter>
     3        <filter-name>springUtf8Encoding</filter-name>
     4        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     5        <init-param>
     6            <param-name>encoding</param-name>
     7            <param-value>UTF-8</param-value>
     8        </init-param>
     9        <init-param>
    10            <param-name>forceEncoding</param-name>
    11            <param-value>true</param-value>
    12        </init-param> 
    13     </filter>
    14     <filter-mapping>
    15        <filter-name>springUtf8Encoding</filter-name>
    16        <url-pattern>/*</url-pattern>
    17    </filter-mapping>

    注解配置:

    @Bean
    CharacterEncodingFilter characterEncodingFilter(){
    	CharacterEncodingFilter filter = new CharacterEncodingFilter();
    	filter.setEncoding("UTF-8");
    	filter.setForceEncoding(true);
    	return filter;
    }

    spring源码

     1 public class CharacterEncodingFilterextends OncePerRequestFilter {
     2  
     3     private String encoding;
     4  
     5     private boolean forceEncoding = false;
     6  
     7  
     8     /**
     9      * Set the encoding to usefor requests. This encoding will be passed into a
    10      * {@link javax.servlet.http.HttpServletRequest#setCharacterEncoding} call.
    11      * <p>Whether this encoding will overrideexisting request encodings
    12      * (and whether it will beapplied as default response encoding as well)
    13      * depends on the {@link #setForceEncoding "forceEncoding"} flag.
    14      */
    15     public void setEncoding(String encoding) {
    16        this.encoding = encoding;
    17     }
    18  
    19     /**
    20      * Set whether theconfigured {@link #setEncoding encoding} of this filter
    21      * is supposed to overrideexisting request and response encodings.
    22      * <p>Default is "false", i.e. do notmodify the encoding if
    23      * {@link javax.servlet.http.HttpServletRequest#getCharacterEncoding()}
    24      * returns a non-null value.Switch this to "true" to enforce the specified
    25      * encoding in any case,applying it as default response encoding as well.
    26      * <p>Note that the response encoding will onlybe set on Servlet 2.4+
    27      * containers, sinceServlet 2.3 did not provide a facility for setting
    28      * a default responseencoding.
    29      */
    30     public void setForceEncoding(boolean forceEncoding) {
    31        this.forceEncoding = forceEncoding;
    32     }
    33  
    34  
    35     @Override
    36     protected void doFilterInternal(
    37            HttpServletRequest request, HttpServletResponse response,FilterChain filterChain)
    38            throws ServletException, IOException {
    39  
    40        if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
    41            request.setCharacterEncoding(this.encoding);
    42            if (this.forceEncoding) {
    43               response.setCharacterEncoding(this.encoding);
    44            }
    45        }
    46        filterChain.doFilter(request, response);
    47     }
    48 }

    该字符集过滤器有两个重要参数,分别是encodingforceEncoding

    setEncoding

    public void setEncoding(java.lang.String encoding)

    Set the encodingto use for requests. This encoding will be passed into aServletRequest.setCharacterEncoding(java.lang.String) call.

    setForceEncoding

    public void setForceEncoding(boolean forceEncoding)

    Set whether theconfigured encoding of this filter is supposed to override existing request andresponse encodings.

    通过参考文档,我们可以知道:

    l.第一个方法setEncoding()相当于:ServletRequest.setCharacterEncoding(java.lang.String),即设置request编码格式

    2.第二个方法setForceEncoding()的作用是:同时设置ServletResponseServletRequest的编码格式。

    配置相当于代码中:

    resp.setCharacterEncoding("UTF-8");
    req.setCharacterEncoding("UTF-8");

    在请求处理的过程中我们可以不用考虑编码方面的问题,上面两句代码可以省略,编码统一交给Spring过滤器去处理。

  • 相关阅读:
    docker node中uid与gid的授权问题
    windows下docker无法进行端口映射的问题
    IOS/Safari下document对象的scrollHeight值比Chrome更大
    Vue/Egg大型项目开发(二)数据库设计
    .babelrc和babel.config.js的相同配置不能合并
    es6 class中责任链模式与AOP结合
    JS设计模式(10)职责链模式(重要)
    Vue/Egg大型项目开发(一)搭建项目
    你不知道的JS(3)来聊聊this
    CentOS7为php7.2安装php-redis扩展(redis环境搭建二)
  • 原文地址:https://www.cnblogs.com/niejunlei/p/5279930.html
Copyright © 2011-2022 走看看