zoukankan      html  css  js  c++  java
  • 请求参数空值处理

    说明:当请求参数的值为空时,服务器会将空值转化成空字符串。

    可以使用包装类HttpServletRequestWrapper的子类(自定义)替换HttpServletRequest 对象。

    问题:如何使得每个请求都使用空值处理?

    答:使用拦截器,拦截所有请求,遍历请求参数,处理空值。

    具体实现:

    步骤一:

      自定义HttpServletRequestWrapper子类。

      

    package org.chu.filter;
    
    import java.util.Enumeration;
    import java.util.Map;
    import java.util.Vector;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    
    /**
     * 思路:
     * 第一步:声明一个成员变量是Map。用于设置我们修改后的表单参数
     * 第二部:重写request里面的获得表单参数的四个方法。设置值都是通过我们修改后参数的变量Map来获得值
     * @author ranger
     *
     */
    public class NullValueHandlerRequestWrapper extends HttpServletRequestWrapper  {
        
        public NullValueHandlerRequestWrapper(HttpServletRequest request) {
            super(request);
    
        }
    
        private Map<String, String[]> parameterMap;
    
        public void setParameterMap(Map<String, String[]> parameterMap) {
            this.parameterMap = parameterMap;
        }
        
        @Override
        public String getParameter(String name) {
            String[] results = parameterMap.get(name);
            return results[0];
        }
    
        @Override
        public Map<String, String[]> getParameterMap() {
    
            return this.parameterMap;
        }
    
        @Override
        public Enumeration<String> getParameterNames() {
        
            Vector<String> vector = new Vector<String>(parameterMap.keySet());
            return vector.elements();
        }
    
        @Override
        public String[] getParameterValues(String name) {
        
            return parameterMap.get(name);
        }
        
    }

      步骤二、自定义拦截器,获取请求参数,处理空值

    package org.chu.filter;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    
    public class NullvalueHandlerFilter implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            
        }
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            //获得所有字段
            Map<String, String[]> parameterMap = new HashMap<>(request.getParameterMap());
             Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
             Iterator<Entry<String, String[]>> iterator = entrySet.iterator();
            while (iterator.hasNext()) {
                 Entry<String, String[]> entry = iterator.next();
                if (entry.getValue()!=null) {
                    for(int i=0;i<entry.getValue().length;i++) {
                        if ("".equals(entry.getValue()[i])) {
                            iterator.remove();
                        }
                    }
                }    
            }
            //parameterMap就会将空字符串转成null.
            //注意:request对象是无法修改表单数据的!!ServletRequest对象是容Tomcat产生的,我们有没有办法new创建.
            NullValueHandlerRequestWrapper wrapper =new NullValueHandlerRequestWrapper((HttpServletRequest)request);
            wrapper.setParameterMap(parameterMap);
            //获得重写后的请求
            chain.doFilter(wrapper, response);
        }
    
        @Override
        public void destroy() {
            
        }
    }

      

  • 相关阅读:
    前端试题-正则中test, exec, match的区别
    前端试题-什么是css sprite?优缺点?
    有哪些软件堪称「神器」,却不被大众所知?(转)
    gif,png,jpg的区别
    前端试题-两列等高布局
    20160109小问题
    动画效果之运动
    用JS控制下拉菜单效果
    获取当前时间getDate()注意点
    全心加入web前端开发,向上吧!
  • 原文地址:https://www.cnblogs.com/cdeelen/p/11155448.html
Copyright © 2011-2022 走看看