这里有新鲜出炉的精品教程,程序狗速度看过来!
Spring是什么呢?首先它是一个开源的项目,而且目前非常活跃;它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,采用IOC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等
这篇文章主要介绍了Spring MVC自定义日期类型转换器实例详解的相关资料,需要的朋友可以参考下
Spring MVC自定义日期类型转换器实例详解
web层采用Spring MVC框架,将查询到的数据传递给APP端或客户端,这没啥,但是坑的是实体类中有日期类型的属性,但是你必须提前格式化好之后返回给它们。说真的,以前真没这样做过,之前都是一口气查询到数据,然后在jsp页面上格式化,最后展示给用户。但是这次不同,这次我纯属操作数据,没有页面。直接从数据库拿数据给它们返数据、它们给我传数据我持久化数据,说到这里一个小问题就默默的来了。
首先把问题还原一下吧(这是一个数据导出功能),下图中用红框圈起来的都是直接从数据库中拿到的数据,但是不幸的是它们的对象中都包含日期类型的属性,然后我直接使用com.alibaba.fastjson.JSONObject将其转成json串返回给APP端和客户端,但是他们拿到的数据中时间类型的值都是时间戳,很不人性化,我也觉的很不人性化,就答应给他们格式化一下,不料,问题来了,格式化好之后然后又设置进去,结果是没用,没用,没用,重要的事情说三遍!
解决上面出现的问题,格式化对象中的日期类型的属性值,然后返回给请求者。记住:这个动作是在服务器端完成,并且实体类和数据表中的类型也都不变,照样是日期类型的。
第一步:首先自定义一个日期类型转换器(附代码)
- package com.tgsit.cjd.utils;
- /**
- * 日期类型转换器:
- * 自动格式化对象中的日期类型
- */
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Locale;
- import net.sf.json.JsonConfig;
- import net.sf.json.processors.JsonValueProcessor;
- public class JsonDateValueProcessor implements JsonValueProcessor{
- private String format ="yyyy-MM-dd";
- public JsonDateValueProcessor() {
- super();
- }
- public JsonDateValueProcessor(String format) {
- super();
- this.format = format;
- }
- @Override
- public Object processArrayValue(Object paramObject,
- JsonConfig paramJsonConfig) {
- return process(paramObject);
- }
- @Override
- public Object processObjectValue(String paramString, Object paramObject,
- JsonConfig paramJsonConfig) {
- return process(paramObject);
- }
- private Object process(Object value){
- if(value instanceof Date){
- SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
- return sdf.format(value);
- }
- return value == null ? "" : value.toString();
- }
- }
第二步:如果项目中没有引入json-lib包,则引入
- <dependency>
- <groupId>net.sf.json-lib</groupId>
- <artifactId>json-lib</artifactId>
- <version>2.4</version>
- <classifier>jdk15</classifier>
- </dependency>
第三步:返回数据之前先使用日期类型转换器格式化日期数据
这里必须先创建JsonConfig对象,然后调用registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());方法将转换器注入进去,最后在调用JsonArray的formObject(数据,new JsonConfig())方法进行处理。
注意:这里还有个小坑,就是当你处理的是单纯的一个实体对象,则直接可以jsonObject.formObject(数据,new JsonConfig());
但是你处理的一个list集合数据时,则记得用jsonArray.formObject(数据,new JsonConfig());否则报错。
- @RequestMapping(value = "/exportInfo", method = RequestMethod.GET)@ResponseBody public String exportInfo(HttpServletResponse response) throws Exception {
- List < QueryVo > exportInfoList = queryVoService.exportInfo();
- if (exportInfoList != null && exportInfoList.size() > 0) {
- List < Object > result = new ArrayList < Object > ();
- JsonResult model = null;
- for (QueryVo queryVo: exportInfoList) {
- OwnerInfo ownerInfo = ownerInfoService.selectOwnerInfoByVIN(queryVo.getVin());
- List < MortgagerInfo > morInfoList = mortgagerInfoService.selectByVIN(queryVo.getVin());
- List < TransferInfo > traInfoList = transferInfoService.selectByVIN(queryVo.getVin());
- model = new JsonResult();
- model.setOwnerInfo(ownerInfo);
- model.setMortgagerInfo(morInfoList);
- model.setTransferInfo(traInfoList);
- result.add(model);
- }
- //调用自定义日期类型转换器,自动格式化对象中的日期类型的字段值
- JsonConfig jsonConfig = new JsonConfig();
- jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
- return CGSConstants.returnJson(CGSConstants.SUCCESS, "导出成功", JSONArray.fromObject(result, jsonConfig));
- }
- return CGSConstants.returnJson(CGSConstants.SUCCESS, "尚无数据", null);
- }
来源: http://www.phperz.com/article/17/0903/338974.html