原文
JFinal中接收URL中的参数或者model中的参数是很方便的,但是对于web2.0的网站来说,经常会以json方式提交比较复杂的数据,比如一个查询,包含了各种过滤条件和排序分页,前端脚本可能提交的数据是这样的:
{ "type":1, "key":"keyword", "paging":{ "size":50, "index":0 }, "sort":{ "field":"time", "type":"desc" } }
像SpringMVC就提供了@RequestBody将数据绑定到json对象上,但是jFinal不支持,需要自己从POST中读取并解析这个json数据,先定义一个与请求同结构的Java对象,比如起名叫QueryRequest:
packagecom.demo; import com.demo.Paging; import com.demo.Sort; public class QueryRequest { private int type; private String key; private Paging paging; private Sort sort; public int getType() { return type; } public void setType(int type) { this.type = type; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public Paging getPaging() { return paging; } public void setPaging(Paging paging) { this.paging = paging; } public Sort getSort(){ return sort; } public void setSort(Sort sort){ this.sort = sort; } }
其中用到了Paging和Sort两个类:
package com.demo; public class Paging { private int size; private int index; public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
package com.demo; public class Sort { private String field; private String type; public String getField() { return field; } public void setField(String field) { this.field = field; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
然后在Controller里就从request中读取json字符串,然后调用fastjson解析提交的数据了,:
@Before(POST.class) public void getData(){ try{ //从requst中读取json字符串 StringBuilder json = new StringBuilder(); BufferedReader reader = this.getRequest().getReader(); String line = null; while((line = reader.readLine()) != null){ json.append(line); } reader.close(); //调用fastjson解析出对象 QueryRequest request = JSONObject.parseObject(json.toString(), QueryRequest.class); //然后就可以使用request得到请求的所有数据了 //下略 //....... } catch(Exception ex){ //异常处理,略 } renderText("测试"); }
转换部分会经常使用,可以提出来:
/** * 取Request中的数据对象 * @param valueType * @return * @throws Exception */ protected <T> T getRequestObject(Class<T> valueType) throws Exception { StringBuilder json = new StringBuilder(); BufferedReader reader = this.getRequest().getReader(); String line = null; while((line = reader.readLine()) != null){ json.append(line); } reader.close(); return JSONObject.parseObject(json.toString(), valueType); }
使用的时候一句就行了:
QueryRequest requst = getRequestObject(QueryRequest.class);
另外附上前端ajax调用的脚本:
$.ajax({ "url": "/home/getDate", //路径 "cache": false, //不缓存 "async": true, //异步 "type": "POST", //POST方式提交 "dataType": "json", //json格式,重要 "contentType": "application/json", //json格式 "data": {}, //要提交的数据对象 success: function (json) { //成功处理 }, error: function (x, e) { //异常处理 } });
PS:很喜欢jFinal,相比于SpringMVC庞大的体积,jFinal真是的很小巧。
相关推荐
1. 例子代码有两部分:androidJson是andoird的工程,inxdex.php是php服务器json数据产生部分代码。 2. 服务器端提供http(get)获取方式获取json数据的api例子,是用php写的。 4. android的apk给你说完成http数据...
final_codes.json
save_final.json
FinalData 数据恢复 硬盘数据恢复
FinalData就是通过这个机制来恢复丢失的数据的,在清空回收站以后也不例外。另外,FinalData可以很容易地从格式化后的文件和被病毒破坏的文件恢复。甚至在极端的情况下,如果目录结构被部分破坏也可以恢复,只要数据...
FinalData数据恢复 数据恢复 实现简单的数据恢复
脂肪或 MFT(为 NTFS), 意谓文件数据仍然所有在硬盘磁碟机上的数据部门。 如此,技术上,文件能仍然被回复。 FinalData 使用这一项原则复原数据, 甚至那之后使再循环箱柜已经被倒空。 除此之外, FinalData 容易地...
Finaldata适用于电脑硬盘、U盘、手机内存卡、相机内存卡、移动硬盘、SD卡、TF卡等存储设备,可以完美的恢复上述设备中丢失的文件数据。 Finaldata截图 相关阅读 FinalData电脑硬盘数据怎么恢复?FinalData图文...
FinalData就是通过这个机制来恢复丢失的数据的,在清空回收站以后也不例外。另外,FinalData可以很容易地从格式化后的文件和被病毒破坏的文件恢复。甚至在极端的情况下,如果目录结构被部分破坏也可以恢复,只要数据...
FinalData数据恢复
FinalData就是通过这个机制来恢复丢失的数据的,在清空回收站以后也不例外。另外,FinalData可以很容易地从格式化后的文件和被病毒破坏的文件恢复。甚至在极端的情况下,如果目录结构被部分破坏也可以恢复,只要数据...
FinalData数据修复 FinalData数据修复
finaldate20数据恢复工具,从国外原网站获取,经使用后非常满意
用于恢复数据、以前在电脑上清空的文件(即使是回收站清空了) 也可以恢复。 恢复的范围是:你的电脑出生到现在、
FinalData深度超强硬盘数据恢复专家v2.01.1028企业版汉化绿色版
超级数据恢复工具的特性功能包括:支持FAT16/32和NTFS,恢复完全删除的数据和目录,恢复主引导扇区和FAT表损坏丢失的数据,恢复快速格式化的硬盘和软盘中的数据,恢复CIH破坏的数据,恢复硬盘损坏丢失的数据,通过...
数据恢复软件FINALDATA数据恢复软件FINALDATA
Final data V2.1 绿色硬盘数据恢复软件破解版
FinalData201(数据恢复企业版) 一款Windows下全能的数据恢复软件
FinalData具有强大的数据恢复功能当文件被误删除、FAT表或者磁盘根区被病毒侵蚀造成文件信息全部丢失、物理故障造成FAT表或者磁盘根区不可读,以及磁盘格式化造成的全部文件信息丢失之后,FinalData都能够通过直接...