JFinal应对Content-Type为application/json的ajax请求参数处理

 ajax传json或在后端通过HttpPost提交请求时,设置的Content-Type为application/json或者text/json时,request.getParameter()并不能取到对应的参数。

就会导致JFinal的Controller中getPara()方法也无法取到对应的参数。我对对Final稍加改动可轻松应对json请求参数。

首先做成一个全局拦截器,对于requst传送过来的json字符串,在全局拦截器中加载到request中。("request.json.str"可配置为全系统唯一的id)

    @Override
    public void intercept(Invocation invoc) {
        
        Controller contro = invoc.getController();
        HttpServletRequest request = contro.getRequest();

        
        if("application/json".equals(request.getContentType())){
            request.setAttribute(PropKit.get("request.json.str"), 
                    JSON.parseObject(HttpKit.readIncommingRequestData(request)));
        }
        
        invoc.invoke();
        
    }

然后在JFinal的Controller中加入如下方法,解析json中的参数。

    private String getRequstParameter(String name){
        String para = request.getParameter(name);
        if(ToolString.isblank(para)){
            JSONObject object = getAttr(PropKit.get("request.json.str"));
            if(object!=null && !object.isEmpty()){
                para = object.getString(name);
            }
        }
        return para;
    }

对Cotroller的getPara()类似方法进行自己重新实现或修改。

public String getPara(String name) {
        //return request.getParameter(name);
        return getRequstParameter(name);
    }

    public String getPara(String name, String defaultValue) {
        //String result = request.getParameter(name);
        String result = getRequstParameter(name);
        
        return result != null && !"".equals(result) ? result : defaultValue;
    }

public Integer getParaToInt(String name) {
        //return toInt(request.getParameter(name), null);
        return toInt(getRequstParameter(name), null);
    }

    public Integer getParaToInt(String name, Integer defaultValue) {
        //return toInt(request.getParameter(name), defaultValue);
        return toInt(getRequstParameter(name), defaultValue);
    }

    public Long getParaToLong(String name) {
        //return toLong(request.getParameter(name), null);
        return toLong(getRequstParameter(name), null);
    }

    public Long getParaToLong(String name, Long defaultValue) {
        //return toLong(request.getParameter(name), defaultValue);
        return toLong(getRequstParameter(name), defaultValue);
    }

    public Boolean getParaToBoolean(String name) {
        //return toBoolean(request.getParameter(name), null);
        return toBoolean(getRequstParameter(name), null);
    }

    public Boolean getParaToBoolean(String name, Boolean defaultValue) {
        //return toBoolean(request.getParameter(name), defaultValue);
        return toBoolean(getRequstParameter(name), defaultValue);
    }

    public Date getParaToDate(String name) {
        //return toDate(request.getParameter(name), null);
        return toDate(getRequstParameter(name), null);
    }

    public Date getParaToDate(String name, Date defaultValue) {
        //return toDate(request.getParameter(name), defaultValue);
        return toDate(getRequstParameter(name), defaultValue);
    }

写个后端调用测试下,搞定了。

String jsonMsg = "{\"taskId\":\"26187057f26b479d8a5b89331e1faf21\",\"operator\":\"axh\"}";
        String returnJson = ToolHttp.post(true, "http://localhost/snaker/executeTask", jsonMsg, "application/json");

转载于:https://my.oschina.net/aixiaohua/blog/690823

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值