WEB层采用Spring MVC框架,将查询到的数据传递给APP端或客户端,这没啥,但是坑的是实体类中有日期类型的属性,但是你必须提前格式化好之后返回给它们。说真的,以前真没这样做过,之前都是一口气查询到数据,然后在jsp页面上格式化,最后展示给用户。但是这次不同,这次我纯属操作数据,没有页面。直接从数据库拿数据给它们返数据、它们给我传数据我持久化数据,说到这里一个小问题就默默的来了。

首先把问题还原一下吧(这是一个数据导出功能),下图中用红框圈起来的都是直接从数据库中拿到的数据,但是不幸的是它们的对象中都包含日期类型的属性,然后我直接使用com.alibaba.fastjson.JSONObject将其转成json串返回给APP端和客户端,但是他们拿到的数据中时间类型的值都是时间戳,很不人性化,我也觉的很不人性化,就答应给他们格式化一下,不料,问题来了,格式化好之后然后又设置进去,结果是没用,没用,没用,重要的事情说三遍!

解决上面出现的问题,格式化对象中的日期类型的属性值,然后返回给请求者。记住:这个动作是在服务器端完成,并且实体类和数据表中的类型也都不变,照样是日期类型的。

第一步:首先自定义一个日期类型转换器(附代码)

 1 package com.tgsit.cjd.utils; 3 /** 4  * 日期类型转换器: 5  *         自动格式化对象中的日期类型 6  */ 8 import java.text.SimpleDateFormat; 9 import java.util.Date;10 import java.util.Locale;12 import net.sf.json.JsonConfig;13 import net.sf.json.processors.JsonValueProcessor;15 public class JsonDateValueProcessor implements JsonValueProcessor{17     private String format ="yyyy-MM-dd";  19     public JsonDateValueProcessor() {
20         super();
21     }    23     public JsonDateValueProcessor(String format) {
24         super();
25         this.format = format;
26     } 28     @Override
29     public Object processArrayValue(Object paramObject,
30             JsonConfig paramJsonConfig) {
31         return process(paramObject);
32     }  34     @Override
35     public Object processObjectValue(String paramString, Object paramObject,
36             JsonConfig paramJsonConfig) {
37         return process(paramObject);
38     }    41     private Object process(Object value){
42         if(value instanceof Date){
43             SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
44             return sdf.format(value);
45         }
46         return value == null ? "" : value.toString();
47     }  49 }

第二步:如果项目中没有引入json-lib包,则引入

1 <dependency>2     <groupId>net.sf.json-lib</groupId>3     <artifactId>json-lib</artifactId>4     <version>2.4</version>5     <classifier>jdk15</classifier>6</dependency>

第三步:返回数据之前先使用日期类型转换器格式化日期数据

这里必须先创建JsonConfig对象,然后调用registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());方法将转换器注入进去,最后在调用JsonArray的formObject(数据,new JsonConfig())方法进行处理。

注意:这里还有个小坑,就是当你处理的是单纯的一个实体对象,则直接可以jsonObject.formObject(数据,new JsonConfig());

但是你处理的一个list集合数据时,则记得用jsonArray.formObject(数据,new JsonConfig());否则报错。

 1 @RequestMapping(value = "/exportInfo", method = RequestMethod.GET) 2     @ResponseBody 3     public String exportInfo(HttpServletResponse response) throws Exception{ 4         List<QueryVo> exportInfoList = queryVoService.exportInfo(); 5         if(exportInfoList != null && exportInfoList.size() > 0){ 6             List<Object> result = new ArrayList<Object>(); 7             JsonResult model = null; 8             for (QueryVo queryVo : exportInfoList) { 9                 OwnerInfo ownerInfo = ownerInfoService.selectOwnerInfoByVIN(queryVo.getVin());10                 List<MortgagerInfo> morInfoList = mortgagerInfoService.selectByVIN(queryVo.getVin());11                 List<TransferInfo> traInfoList = transferInfoService.selectByVIN(queryVo.getVin());12                 model = new JsonResult();13                 model.setOwnerInfo(ownerInfo);14                 model.setMortgagerInfo(morInfoList);15                 model.setTransferInfo(traInfoList);16                 result.add(model);17             }18             //调用自定义日期类型转换器,自动格式化对象中的日期类型的字段值19             JsonConfig jsonConfig = new JsonConfig();
20             jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());21             return CGSConstants.returnJson(CGSConstants.SUCCESS,"导出成功",JSONArray.fromObject(result, jsonConfig));22         }23         return CGSConstants.returnJson(CGSConstants.SUCCESS,"尚无数据",null);24     }

转载于:https://blog.51cto.com/kiujyhgt/1917591

Spring MVC__自定义日期类型转换器相关推荐

  1. 使用 mybatis 自定义日期类型转换器

    文章目录 前言 一.resources 1.1 sqlMapConfig.xml 1.2 log4j.properties 1.3 userMapper.xml 二.java结构 2.1 dao 2. ...

  2. 自定义的类型转换器中怎样自定义错误消息?(待解答)

    1.HTTP没有"类型"的概念,每一项表单输入只可能是一个字符串或一个字符串数组.从HTML表单到服务器端,必须把String转换为特定的数据类型. 2.字符串和基本数据类型之间的 ...

  3. 通过mybatis自定义参数类型转换器,进行数据库字段加密脱敏

    1 问题背景 在数据库存储人员的信息时,有一些信息是敏感数据,如身份证号.出生地等.为了防止信息泄漏,这些信息不允许直接在数据库中查看,此时就需要对这些字段进行加密存储,但在页面查看的仍旧是解密后的数 ...

  4. Spring MVC Converter(类型转换器)详解

    Spring MVC 框架的 Converter<S,T> 是一个可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型.开发者在实际应用中使用框架内置的类型 ...

  5. oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler

    此文其实是java操作Oracle类型XMLType总结二:使用Mybatis附带的一篇小结. Mybatis实现自定义的转换器,十分的简单,其主要步骤分为三步,这里以操作XMLType类型为例. 第 ...

  6. EasyExcel 自定义LocalDate类型转换器Converter

    1 Maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel< ...

  7. struts2类型日期类型转换器的bug

    http://www.cnblogs.com/jingpeipei/p/5945724.html 按照操作没有问题.但是自己操作就有问题. 最后发现struts2的类型转换器在输出是必须用strut2 ...

  8. Spring MVC 解决日期类型动态绑定问题

    出处:http://www.cnblogs.com/crazy-fox/archive/2012/02/18/2357699.html ean 名为User,则在相同的包中存在UserEditor类可 ...

  9. springmvc使用spring自带日期类型验证

    控制器 @Controller public class MyController {// 处理器方法@RequestMapping(value = "/first.do")pub ...

最新文章

  1. android .a .so区别,.so,.la和.a库文件有什么区别?
  2. 安卓linux定时执行脚本,Android开机自动执行shell脚本
  3. 不要重复发明轮子:C++重用的5重境界
  4. ad 4层板设计实例文件_案例 | 美研【风险管理专业】1620Fall 310+申请实例
  5. JVM因“ OutOfMemory”错误而关闭-我该怎么办?
  6. matlab处理亮度不均匀,校正亮度不均匀问题并分析前景对象
  7. 问题:lapack.so
  8. main:处理命令行选项
  9. 小象机器学习(邹博老师)学习笔记
  10. 【Unity3D日常BUG】Unity3D 中听不到声音解决方案
  11. 杂谈 之 闲来无事(三)
  12. Linux的ssh登录命令,Linux SSH登录命令总结
  13. excel转置怎么操作_直接理解转置卷积(Transposed convolution)的各种情况 - 颀周
  14. Dex.top新手使用教程
  15. better-scroll实现滚动效果
  16. 许巍的故乡到底想表达什么?是写给谁的?
  17. 用友U9产品SOA设计架构遭技术质疑
  18. 赛格威机器人待遇_赛格威配送机器人:年内做到10天无故障 3年10万台
  19. Vue 使用 Viewers 实现图片的 放大缩小、 旋转 、 拖拉等操作、支持多图片
  20. Linux登录输入密码后返回登录界面

热门文章

  1. 短网址批量生成 v2.0
  2. linux 网络状态图,linux的网络连接状态
  3. Error in nextTick
  4. wordpress模板-单栏整洁的个人博客Siren主题模板
  5. 两款在线小游戏-e梦迷宫、恐龙跳一跳
  6. 面试:一文搞懂Java集合
  7. 虚拟空间,域名解析,A记录,MX记录,CNAME记录,TTL 等 更多Web服务器相关名词解释
  8. Ubuntu 16.04 安装第三方Apps Can’t Install Third-Party Apps on Ubuntu 16.04? You’re No
  9. 【漫画详解】用iframe障眼法,骗取用户点击
  10. 搜索——滑雪(poj1088)