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");
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");
相关文章推荐
- Ajax
- $.ajax()方法详解
- jQuery ajax - ajax() 方法
- 使用Ajax实现异步用户名验证
- 使用ajax实现用户登录验证(升级版)
- 解决Ajax悬停效果,无法遮蔽FLASH的问题
- 再谈Jquery Ajax方法传递到action(补充)
- Dom在ajax技术中的作用说明
- AJAX实现瀑布流触发分页与分页触发瀑布流的方法
- 使用Ajax实时检测"用户名、邮箱等"是否已经存在
- 探讨Ajax中同步与异步之间的区别
- ajax中data传参的两种方式分析
- 原生AJAX写法实例分析
- 探秘ajax跨域请求
- Ajax实现简单下拉选项效果【推荐】
- JQuery ajax返回JSON时的处理方式 (三种方式)
- Ajax中浏览器和服务器交互详解
- jQuery AJAX实现调用页面后台方法
- ajax实现点击不同的链接让返回的内容显示在特定div里
- ajax 动态传递jsp等页面使用id辨识传递对象