获取并修改request参数

导读:创作本文目的是给使用jersey使用者修改request参数做一定参考的。filter 获值后,修改参数后,接口接受数据为空。出现的原因是jersey框架内的安全机制造成的。可以自己浏览 jersey的API文档

分享我的工作经历:
request取值我用了三种方式,但是设值后,然并卵,jersey后台取值都不成功:(只要取参数调用了一次,getParamMap()再设值进去就取不到)
我需要过滤取值的正真原因是,因为前台用的angularjs封装调用API时URL,将 ‘%’ 和 ‘&’ 转换成了转义字符,‘bfb;’ ‘^amp;’

var str = json.toString().replace(/&/g, “^amp;”);
var str = str.replace(/%/g, “bfb;”);

,存数据库时,保存的值是 ‘bfb;’ ‘^amp;’,数据回显就不对。我也是郁闷了很久。后来公司的一个大牛看到这个问题。果断把底层的封装改了

var str = json.toString().replace(/&/g, “%26”);
var str = str.replace(/%/g, “%25”);

完美carry,原来压根就不需要修改参数。顿时大悟,大神就是大神。以后还有更多的东西要学。

下面付下取值方法:

获取参数方式1–直接取再设值


@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
            FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    //这里直接获取
    Enumeration<String> enumeration = request.getParameterNames();
        while (enumeration.hasMoreElements()) {
            String paraName=(String)enumeration.nextElement();  
            System.out.println(paraName+": "+request.getParameter(paraName));  
        }
        //设置值...
        filterChain.doFilter(request, response);
}

获取参数方式2–extends HttpServletRequestWrapper


public void editParameter(String name , Object value) {   
        if(value != null) {
            paramMap.setlock(false);
            paramMap.getParamsValues(name).replace('^amp;','&');
            paramMap.getParamsValues(name).replace('bfb;','%');
            paramMap.setlock(true);
        }
    }

获取参数方式3–反射

Method method=requestParams.getClass().getMethod("setLocked",new Class[]{boolean.class});
method.invoke(requestParams,new Object[]{new Boolean(false)});

总结

当遇到问题时,要换个角度思考问题。可以向公司其他同事问问意见什么的。少走弯路。充分利用时间,提高效率。不加班。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值