Spring MVC自定义日期类型转换器实例详解

所属分类: 网络编程 / JSP编程 阅读数: 1426
收藏 0 赞 0 分享

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);
  }

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

jsp中使用frameset框架 边框固定不让更改边框的大小

有时候可能要对自己布局好的页面不让用户更改边框的大小,这样我们可以在frame里面添加noresize="noresize"属性就可以实现其中的功能
收藏 0 赞 0 分享

response.getWriter().write()向前台打印信息乱码问题解决

本节主要介绍了response.getWriter().write()向前台打印信息乱码问题解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

jsp页面中如何将时间戳字符串格式化为时间标签

本节主要介绍了jsp页面中如何将时间戳字符串格式化为时间标签,需要的朋友可以参考下
收藏 0 赞 0 分享

获取上一页面的URL和本页的URL的方法

本节主要介绍了获取上一页面的URL和本页的URL的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

window.top[_CACHE]实现多个jsp页面共享一个js对象

两个js页面要共享一个就js对象,想了半天用window.top['_CACHE']来存放这个变量,即可实现,不同Jsp页面直接的对象共享
收藏 0 赞 0 分享

通过过滤器(Filter)解决JSP的Post和Request中文乱码问题

这篇文章主要介绍了jsp中通过过滤器(Filter)解决JSP的Post和Request中文乱码问题的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

JSP页面的动态包含和静态包含示例及介绍

这篇文章主要介绍了JSP页面的动态包含和静态包含示例及介绍,本文讲解了它们的区别并给出了相应例子,需要的朋友可以参考下
收藏 0 赞 0 分享

JSP中实现判断客户端手机类型并跳转到app下载页面

这篇文章主要介绍了JSP中实现判断客户端手机类型并跳转到app下载页面,实现的原理,是检测浏览器的 USER-AGENT 这个header,然后根据正则表达式来确定客户端类型,需要的朋友可以参考下
收藏 0 赞 0 分享

jsp实现点击help打开chm文件

有个javaweb项目,需要在portal上面点击help即可打开“帮助.chm”文件,下面与大家分享下jsp如何打开chm文件
收藏 0 赞 0 分享

JSP自定义分页标签TAG全过程

这篇文章主要介绍了JSP自定义分页标签TAG全过程,比较实用,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多