SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析...
两个方向:
一、前台至后台:
Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int,String等)。如果传递过来的是特殊对象,则需要手动进行封装。
Spring提供了@initBinder(初始化绑定封装)注解和WebDataBinder工具。用户只需要向WebDataBinder注册自己需要的类型的属性编辑器即可。
/* 前台传递过来的String类型时间,通过下面的初始化绑定,转换成Date类型 */ @initBinder public void initBinder(WebDataBinder binder){SimpleDateFormate sdf=new SimpleDateFormate("yyyy-MM-dd HH:mm"); binder.registerCustomEditor(Date.class,new CustomDateEditor(sdf,true));//true表示允许空值,false不允许 }
更多详细内容转载链接
1,http://blog.csdn.net/hongxingxiaonan/article/details/50282001(前台传递过来非Date类型,及WebDataBinder的其它方法)
2,http://www.cnblogs.com/AloneSword/p/3998943.html(前台传递过来两个不同名和不同格式的Date类型)
二、后台到前台:
1,可以直接在后台将值存入session或request或page中,后台就可以直接通过EL表达式¥{key.value}取值
2,主要记录后台将List<javaBean>值存入json中,前台如何取值及转换。
我写的项目前台运用的是easyui-datagrid显示值
(1),前台封装的值不包含特殊类型,如java.util.Date
easyui前台显示数据可以使用JSONObject,也可以使用JSONArray。但是如果需要在datagrid表格中进行数据显示,只能使用JSONObject,这是easyui的规范。
一般后台会将查询出的List使用JSONArray.fromObject()方法将List转换成JSONArray,但如果是在datagrid的表格中显示,则需要将JSONArray put到JSONobject中;如果不用在datagrid表格中显示,那么JSONObject和JSONArray都可以传递给前台值。
如combobox,后台只需要将List放入JSONArray中即可传向前台。
先给个工具类,用于前台显示:
1 public class ResponseUtil { 2 public static void write(HttpServletResponse response, Object o) throws Exception { 3 response.setContentType("text/html;charset=utf-8"); 4 PrintWriter writer = response.getWriter(); 5 writer.println(o.toString()); 6 writer.flush(); 7 writer.close(); 8 } 9 }
ResponseUtil.java
Controller层方法,PageBean也是自己创建的实体类,是用来给sql语句的limit提供数据而已:
1 public class PageBean { 2 private int page;// 页数 3 private int rows;// 每页行数 4 private int start;// 起始页 5 6 public PageBean(int page, int rows) { 7 super(); 8 this.page = page; 9 this.rows = rows; 10 } 11 12 public int getPage() { 13 return page; 14 } 15 16 public void setPage(int page) { 17 this.page = page; 18 } 19 20 public int getRows() { 21 return rows; 22 } 23 24 public void setRows(int rows) { 25 this.rows = rows; 26 } 27 28 public int getStart() { 29 start = (page - 1) * rows; 30 return start; 31 } 32 33 }
PageBean.java
@RequestMapping("/getProductList") public void getProductList(@RequestParam(value = "page", required = false) String page,@RequestParam(value = "rows") String rows, HttpServletResponse response, Product product) throws Exception {PageBean pageBean = new PageBean(Integer.parseInt(page), Integer.parseInt(rows));Map<String, Object> map = new HashMap<>();map.put("start", pageBean.getStart());map.put("size", pageBean.getRows());map.put("productName", product.getProductName());List<Product> productList = productService.getProductList(map); int total = productService.getTotal(map); JSONObject jsonObject = new JSONObject();JSONArray jsonArray = JSONArray.fromObject(productList);//将查询出的List先转换成JSONArrayjsonObject.put("rows", jsonArray);jsonObject.put("total", total);ResponseUtil.write(response, jsonObject); }
(2),前台封装的值包含如java.util.Date的特殊类型
用Json-lib日期处理:将后台的传递的时间类型转换成前台可以显示的Json格式,用类JsonConfig和接口JsonValueProcessor处理,用法也很简单:
源码JsonValueProcessor接口中只包含两个方法,我定义一个类JavaDateObjectToJsonUtil继承该接口,定义新类是为了可以在类中添加我需要的时间格式
1 public class JavaDateObjectToJsonUtil implements JsonValueProcessor { 2 3 private String format = null; 4 5 public JavaDateObjectToJsonUtil(String format) { 6 super(); 7 this.format = format; 8 } 9 10 @Override 11 public Object processArrayValue(Object value, JsonConfig jsonConfig) { 12 return null; 13 } 14 15 @Override 16 public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { 17 if (value == null) { 18 return ""; 19 } 20 if (value instanceof Date) { 21 return new SimpleDateFormat(format).format((Date) value); 22 } 23 return value.toString(); 24 } 25 26 }
JavaDataObjectToJsonUtil.java
Controller层方法,实体类SaleChance类中包含有属性java.util.Date createTime;并且有createTime的get/set方法:
@RequestMapping("/getSaleChanceList") public void getSaleChanceList(@RequestParam(value = "page", required = false) String page,@RequestParam(value = "rows") String rows, HttpServletResponse response, SaleChance saleChance)throws Exception {PageBean pageBean = new PageBean(Integer.parseInt(page), Integer.parseInt(rows));Map<String, Object> map = new HashMap<>();map.put("start", pageBean.getStart());map.put("size", pageBean.getRows());map.put("createMan", saleChance.getCreateMan());List<SaleChance> saleChanceList = saleChanceService.getSaleChanceList(map);int total = saleChanceService.getTotal(map);JSONObject jsonObject = new JSONObject();JsonConfig jsonConfig = new JsonConfig();jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JavaDateObjectToJsonUtil("yyyy:MM:dd hh:mm"));//只需将时间类型和新类通过JsonConfig注册即可JSONArray jsonArray = JSONArray.fromObject(saleChanceList, jsonConfig);//转换成JSONArray时多带上刚注册的JsonConfigjsonObject.put("rows", jsonArray);jsonObject.put("total", total);ResponseUtil.write(response, jsonObject);}
转载于:https://www.cnblogs.com/aquriushu/p/5783691.html
SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析...相关推荐
- java解析sql查询字段_sql解析json格式字段 如何获取json中某个字段的值?
java将json数据解析为sql语句?小编给你倒一杯热水.可你惦记着其他饮料,所以你将它放置一旁.等你想起那杯水时,可惜它已经变得冰冷刺骨. 图片中是json数据,每个数据的开头都有表名称,操作类型 ...
- Oracle怎么获取json类型字符串值,sql解析json格式字段 如何获取json中某个字段的值?...
java将json数据解析为sql语句?小编给你倒一杯热水.可你惦记着其他饮料,所以你将它放置一旁.等你想起那杯水时,可惜它已经变得冰冷刺骨. 图片中是json数据,每个数据的开头都有表名称,操作类型 ...
- pandas使用strftime函数将dataframe的日期格式数据列按照指定格式(format)转化为日期(时间)字符串数据列
pandas使用strftime函数将dataframe的日期格式数据列按照指定格式(format)转化为日期(时间)字符串数据列 目录
- 小程序前后台数据传递
主要思想就是后端发布成一个URL地址,前端调用即可.在微信小程序中,通过wx.request( )发起请求. 参数名 类型 必填 默认值 说明 最低版本 url String 是 开发者服务器接口 ...
- hive 导出json格式 文件_hive支持json格式的数据
Hive 支持完全 json 格式的数据 现有 json 格式的数据 test.txt ,如下 {"name":"zhang","age" ...
- java 返回 json格式_java 如何返回json格式数据,需要技巧
今天上午给同事调了半个小时的程序,最后发现是在后台代码的java返回json格式的数据出了个错误.因此就想到了广大的初学者一开始学习jquery的时候可能会遇到这个问题.现在我就把我的给大家分享一下, ...
- [转载] 包含对象的json格式_如何把JSON数据格式转换为Python的类对象?
参考链接: python json 12: numpy转换为json数据 JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你 ...
- 包含对象的json格式_如何把JSON数据格式转换为Python的类对象?
JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你接收到这样一个JSON字符串如下: {"Name": ...
- python文件存储为json格式_python 储存文件json
许多程序要求用户输入某些信息,例如存储游戏偏好或提供要可视化的数据.不管程序关注的是什么,程序都要将将用户提供的信息存储在列表.字典等数据结构中.当用户关闭程序时,几乎总是需要保存他们提供的信息:一个 ...
- arcmap小技巧之获取行政区划及json格式转shp,json转csv
出来实习难免遇到各种没见过的问题,给我这gis小白难坏了 今天遇到北京1954坐标系转国家2000 上头甩给我一张北京54的某县耕地数据shp,告诉我这个图不能用到web端,坐标系太旧了 (小声bb: ...
最新文章
- golang 同一个包中函数互相调用报错 undefined 以及在 VSCode 中配置右键执行整个包文件
- Python培训教程分享:Python模块如何导入__all__属性?
- cocos2d-x jsbinding 在线更新策略设计
- day22 time模块
- python之组合数据类型
- java在线学习系统源码_Java在线考试系统源码
- 测试开发面试准备之Selenium 工作原理
- LeetCode 1186. 删除一次得到子数组最大和(DP)
- 假期读书|《步履不停》读后感
- 依赖倒置原则_设计模式原则之依赖倒置原则
- MVC多用户B2C商城系统源码分享
- 深入理解JVM虚拟机读书笔记——垃圾回收算法
- 利用VLMCSD部署本地KMS服务器(Windows + CentOS7)
- 量化交易实战【1】自己搭建一个的股票交易回测框架,并通过均线择时策略进行回测
- 涨跌的例题用C语言编辑,涨跌比率指标用法及源代码(ADR)
- selenium3 设置浏览器安装的位置
- win系统的阿里云服务器部署IDEASpringBoot项目保姆级教程
- 禁毒海报|国际禁毒日海报素材图片大全
- 写在2022的尾巴上
- java如何将汉字转换为拼音_将汉字转换为汉语拼音java实现
热门文章
- 微型计算机原理控制,微机原理与控制技术(试题).doc
- ubuntu字符界面login_关于Ubuntu循环登陆界面
- python 3.0_python基础3.0
- dbms_java 包不存在_Oracle的sql开发之包技术实战
- Google Cloud资源层级, IAM Identity and Access Management, 控制台云交互
- 翻译:YOLOv5 新版本——改进与评估
- 算法导论的道与术、工程师思维奠定能走多远
- 翻译:swift 5通过使用泛型进行高级异步操作Operation
- 【易实战】Spring Cloud Greenwich Hystrix:服务容错保护
- Python全局解释锁