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真是的很小巧。

PPS:使用的是jFinal-2.0,配合fastjson-1.2.3,之前用fastjson-1.2.4时会有问题。

转载于:https://blog.51cto.com/boytnt/1698113

在JFinal的Controller中接收json数据相关推荐

  1. Spring MVC Controller中返回json数据中文乱码处理

    问题 在使用spring MVC Controller的过程中,发现返回到客户端的的中文出现乱码.后台Java代码: @RequestMapping(value = "/upload&quo ...

  2. 如何在Django中接收JSON格式的数据

    Django做了大量工作简化我们的Web开发工作, 这其中当然也包括接收来自客户端的数据这一普遍需求. 大部分时候,从客户端传入的数据主要是FORM的POST数据,和来自URL的GET数据, 在Dja ...

  3. JAVA 接收JSON数据,并进行转换处理

    在日常业务中经常需要与外部系统交互处理数据,在此文章中记录一下我在项目中处理json数据流程. 第一种以实体类处理 以文档中的数据结构构建实体类,使字段与需要接收转换的JSON字段变量名尽量保持一致, ...

  4. controller接收json数据_答疑 | 前后端分离,如何接收json数据?

    1.颜老师,在前后端分离的项目中,后端如何接收前端发来的json数据?我记得是@RequestBody,但有时候会报错. 答:当使用SpringMVC接收json数据时,需要区分json的数据格式,具 ...

  5. SpringMVC接收json数据转对象中的一些问题(415错误的解决)

    SpringMVC接收json数据转对象中的一些问题(415错误的解决) 参考文章: (1)SpringMVC接收json数据转对象中的一些问题(415错误的解决) (2)https://www.cn ...

  6. lombok 的bug?lombok 导致 springmvc 使用 @RequestBody注解 接收 json数据 对象参数绑定失败

    大家好,我是烤鸭:     lombok 导致 springmvc 使用 @RequestBody注解 接收 json数据 对象参数绑定失败.     环境版本:         spring 5.x ...

  7. Java中使用JSON数据传递

    一.Java中使用JSON数据传递 pom依赖引入 <dependency><groupId>com.alibaba</groupId><artifactId ...

  8. PHP接收json数据

    第一种方式: $data = json_decode(file_get_contents('php://input'), true); 第二种方式: $data = $GLOBALS['HTTP_RA ...

  9. Tornado的同步API写法举例实现GET/POST/DELETE请求+Tornado获取post请求中的json数据(转载)

    下面的实验主要来自[1][2],但是对实验2的代码进行了修改,修改过程参考了[3] #---------------------------------------------------实验1--- ...

最新文章

  1. Loj #3111. 「SDOI2019」染色
  2. python爬虫兼职-python爬虫爬取拉勾招聘网
  3. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) A. Bear and Game 水题
  4. boost::callable_traits的remove_member_const_t的测试程序
  5. 一个Google Chrome浏览器的英文字典扩展应用
  6. 深入浅出 Java CMS 学习笔记
  7. 使用ycsb测试cassandra
  8. leetcode 976. 三角形的最大周长
  9. 数据结构与算法——贪心算法
  10. hadoopsdk使用_hadoop部署使用问题及解决
  11. Qt文档阅读笔记|Qt实践| HTTPS知识点-获取某站点SSL证书
  12. MacBook搭建go语言开发环境
  13. MySQL遇到的知识点
  14. CSS绝对定位absolute元素的初始包含块不是body元素,也不是html元素
  15. 编写DAO,通过JdbcTemplate操作数据库的实践
  16. 百度网盘青春版,免费不限速来了(使用体验)
  17. 2018引汉济渭计算机监控系统,基于数字水网的引汉济渭受水区水资源调配业务化研究与应用...
  18. 20级逍遥装备材料汇总及出处
  19. Software Architecture Pattern(Mark Richards)笔记
  20. SpringBoot-logback配置输出Json格式日志

热门文章

  1. python客户端与服务器端通信数据库原理_python网络-HTTP协议(28)
  2. 2021年春季学期-信号与系统-第十二次作业参考答案-第三小题
  3. 如何自制你自己的二极管
  4. html百度地图跳动标注,trajectory.html
  5. 搜java题的公众号_java搜题公众号
  6. linux目录默认权限是什么,linux文件目录默认权限(详解)
  7. ace.js ajax 跳转,ace.js中文使用手册,收集比较全面
  8. css label 居中布局_HTMLCSS精华知识点——表单元素、BFC、两栏布局、居中总结等...
  9. 云计算 java go c_面向对象编程的面向过程表示:c java go
  10. jqgrid 单元格绑定点击事件_自定义事件带参数的触发过程