您的位置:首页 > 移动开发

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

2016-06-14 00:00 323 查看
摘要: ajax传JSON或在后端通过HttpPost提交请求时,设置的Content-Type为application/json或者text/json时,request.getParameter()并不能取到对应的参数,Controller中getPara()类似方法也无法取到对应的参数。我对对Final稍加改动可轻松应对json请求参数。

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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息