• http请求参数中中文乱码问题解决办法


    问题现象:

    请求URL为:

    http://127.0.0.1:9999/micp/queryObjectOut?moduleId=1&json={"hphm":"H3XX96","hpzl":"02","hphm_cn":""}

    后台接收到json字符串中hphm_cn始终为乱码。

    解决办法:

    1 首先处理整个项目编码,保持一致。servlet通过过滤器完成,过滤器代码如下:

    package cn.woogo.micp.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    /**
     * ClassName: CharacterEncodingFilter
     * 
     * @Description: 处理请求参数乱码问题
     * @author Zeus
     * @date 2016-5-17
     */
    public class CharacterEncodingFilter implements Filter {
    
        protected String encoding = null;
    
        protected FilterConfig filterConfig = null;
    
        protected boolean ignore = true;
    
        @Override
        public void destroy() {
            this.encoding = null;
            this.filterConfig = null;
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            if (ignore || (request.getCharacterEncoding() == null)) {
                String encoding = selectEncoding(request);
                if (encoding != null)
                    request.setCharacterEncoding(encoding);
            }
            chain.doFilter(request, response);
        }
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            this.filterConfig = filterConfig;
            // 获取初始化参数
            this.encoding = filterConfig.getInitParameter("encoding");
            String value = filterConfig.getInitParameter("ignore");
            if (value == null) {
                this.ignore = true;
            } else if (value.equalsIgnoreCase("true")) {
                this.ignore = true;
            } else if (value.equalsIgnoreCase("yes")) {
                this.ignore = true;
            } else
                this.ignore = false;
    
        }
    
        protected String selectEncoding(ServletRequest request) {
            return (this.encoding);
        }
    }
    View Code

    2  web.xml文件中配置:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    
        <!--编码处理过滤器 -->
        <filter>
            <filter-name>Character Encoding</filter-name>
            <filter-class>cn.woogo.micp.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <!--制定过滤器映射 -->
        <filter-mapping>
            <filter-name>Character Encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    </web-app>
    View Code

    3 tomcat配置

    打开tomcat安装路径,e.g. D: omcatapache-tomcat-7.0.64confserver.xml,增加URIEncoding。如下:

    <Connector port="9999" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" URIEncoding ="UTF-8"/>

  • 相关阅读:
    安装RVM时报错 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
    如何查看docker run启动参数命令
    ProxySQL 基础篇
    Kafka too many open files解决
    离线方式搭建本地的nginx yum源
    Ceph配置参数详解
    osd自杀问题跟踪
    由一次slow-request浅谈Ceph scrub原理
    Power Apps 定制提交表单后的效果
    基于arm的Linux内核编译
  • 原文地址:https://www.cnblogs.com/hutton/p/5502112.html
Copyright © 2020-2023  润新知