• SpringMVC之解决中乱码


    1、在web.xml中配置一个CharacterEncodingFilter

     <!--因为有缓存的关系,解决中文乱码的过滤器必须要配置在所有过滤器的最前面-->
        <filter>
            <filter-name>characterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <!--encoding的值是固定的,因为它是CharacterEncodingFilter中的一个属性-->
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

      

    2、CharacterEncodingFilter源码如下

    public class CharacterEncodingFilter extends OncePerRequestFilter {
    	@Nullable
            // web.xml中<param-value>对应的值
    	private String encoding;
    
    	private boolean forceRequestEncoding = false;
    
    	private boolean forceResponseEncoding = false;
    
    	public CharacterEncodingFilter() {
    	}
    
    	public CharacterEncodingFilter(String encoding) {
    		this(encoding, false);
    	}
    
    	public CharacterEncodingFilter(String encoding, boolean forceEncoding) {
    		this(encoding, forceEncoding, forceEncoding);
    	}
    
    	public CharacterEncodingFilter(String encoding, boolean forceRequestEncoding, boolean forceResponseEncoding) {
    		Assert.hasLength(encoding, "Encoding must not be empty");
    		this.encoding = encoding;
    		this.forceRequestEncoding = forceRequestEncoding;
    		this.forceResponseEncoding = forceResponseEncoding;
    	}
    
    	public void setEncoding(@Nullable String encoding) {
    		this.encoding = encoding;
    	}
    
    	@Nullable
    	public String getEncoding() {
    		return this.encoding;
    	}
    
    	public void setForceEncoding(boolean forceEncoding) {
    		this.forceRequestEncoding = forceEncoding;
    		this.forceResponseEncoding = forceEncoding;
    	}
    
    	public void setForceRequestEncoding(boolean forceRequestEncoding) {
    		this.forceRequestEncoding = forceRequestEncoding;
    	}
    
    	public boolean isForceRequestEncoding() {
    		return this.forceRequestEncoding;
    	}
    
    	
    	public void setForceResponseEncoding(boolean forceResponseEncoding) {
    		this.forceResponseEncoding = forceResponseEncoding;
    	}
    
    	public boolean isForceResponseEncoding() {
    		return this.forceResponseEncoding;
    	}
    
    	@Override
    	protected 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);
    	}
    }
    

      

      

  • 相关阅读:
    使用Python和百度对外共享的TTS接口实现文本转语音
    最简单的AI代码——价值“一个亿”
    【CSS】让滚动条消失
    足球圈移动端网页Demo
    golang通过errgroup单chan多个grouting通讯样例
    gin返回前端excel文件流
    xorm构建复杂sql
    CSS实现标签闪动效果
    vue_js遍历双重数组对象
    vue_html实现加载双重数组对象
  • 原文地址:https://www.cnblogs.com/xiaomaomao/p/13604700.html
Copyright © 2020-2023  润新知