springmvc中修改request的参数以及实现去空格功能

          最近发现不能修改request的参数内容,假如想要在request的paramMap里面默认注入modifier内容,采用下面这种方法可以实现向request中修改参数,具体分析如下:
       (1)继承HttpServletRequestWrapper,全名javax.servlet.http.HttpServletRequestWrapper看来也是一个扩展的通用接口,也就是会对request做一次包装,此时我们要如何重写?比如我们要重写getParameter方法和getParameterValues方法,其他方法保存和原来一样,我们在子类中,自己定义一个map用来放对象,结合request本身的参数,加上外部其他自定义的参数,做成一个新的参数表。
package com.cx.web;

public class ParameterRequestWrapper extends HttpServletRequestWrapper {

    private Map<String, String[]> params = new HashMap<String, String[]>();

    @SuppressWarnings("unchecked")
    public ParameterRequestWrapper(HttpServletRequest request) {
        // 将request交给父类,以便于调用对应方法的时候,将其输出,其实父亲类的实现方式和第一种new的方式类似
        super(request);
        //将参数表,赋予给当前的Map以便于持有request中的参数
        this.params.putAll(request.getParameterMap());
        this.modifyParameterValues();
    }

    //重载一个构造方法
    public ParameterRequestWrapper(HttpServletRequest request, Map<String, Object> extendParams) {
        this(request);
        addAllParameters(extendParams);//这里将扩展参数写入参数表
    }

    public void modifyParameterValues() {//将parameter的值去除空格后重写回去
        Set<String> set = params.keySet();
        Iterator<String> it = set.iterator();
        while (it.hasNext()) {
            String key = (String) it.next();
            String[] values = params.get(key);
            for (int i = 0; i < values.length; i++) {
                values[i] = values[i].trim();
            }
            params.put(key, values);
        }

    }

    @Override
    public Enumeration<String> getParameterNames() {
        return new Vector<String>(params.keySet()).elements();
    }
    @Override
    public String getParameter(String name) {//重写getParameter,代表参数从当前类中的map获取
        String[] values = params.get(name);
        if (values == null || values.length == 0) {
            return null;
        }
        return values[0];
    }

    public String[] getParameterValues(String name) {//同上
        return params.get(name);
    }


    public void addAllParameters(Map<String, Object> otherParams) {//增加多个参数
        for (Map.Entry<String, Object> entry : otherParams.entrySet()) {
            addParameter(entry.getKey(), entry.getValue());
        }
    }


    public void addParameter(String name, Object value) {//增加参数
        if (value != null) {
            if (value instanceof String[]) {
                params.put(name, (String[]) value);
            } else if (value instanceof String) {
                params.put(name, new String[]{(String) value});
            } else {
                params.put(name, new String[]{String.valueOf(value)});
            }
        }
    }
}
        (2)接下来我们说下new出来的request如何使用,以及让业务层使用到,方法如下:

写一个过滤器,在filter这个地方new了这个自己定义的request后,接下来request就是new出来的,这个filter一定要在springmvc之前处理,如下所示:

ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper((HttpServletRequest)request);
requestWrapper.addParameter("fff" , "我靠");
filterChain.doFilter(requestWrapper, servletResponse);
具体的方法如下:
package com.cx.web;
public class CommonFilter implements Filter {

    public CommonFilter() {
    }

    public void destroy() {
    }


    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest hr = (HttpServletRequest) request;

        long start = System.currentTimeMillis();

        String url = hr.getServletPath().trim();

        ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper((HttpServletRequest) request);

        chain.doFilter(requestWrapper, response);

        long end = System.currentTimeMillis();

        System.out.println("============================连接:" + url + ",响应时间:" + (end - start));
    }

    public void init(FilterConfig fConfig) throws ServletException {
    }

}
     (3)在web.xml中添加转化器
<!--去参数的左右空格,也可以用springMVC拦截器实现-->
    <filter>
        <filter-name>commonFilter</filter-name>
        <filter-class>com.cx.web.CommonFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>commonFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值