本文主要是介绍JSONUtils ToBean 时间变为默认值 解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用到net.sf包里json转换工具,结果时间戳或者格式化后的yyy/mm/dd总是转换为当前系统时间,看了下源码原来是格式转换有问题,整理了几种解决方案
一. 异常现象
使用toBean转换时并不抛出异常,而是在日志中打出以下警告信息:
Can’t transform property ‘birthday’ from java.lang.String into java.util.Date. Will register a default Morpher
由于是warning,所以很容易让人忽略(我当时就没在意,逃)
二. 解决方案
向JSONutils注册新的时间格式化方法
① 简单化注册
直接在业务类使用toBean前加入
//自己定义的时间格式化格式String[] dateFormats = new String[] {"yyyy-MM-dd"}; JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
如果不好用,就加上静态块
static{String[] dateFormats = new String[] {"yyyy-MM-dd"}; JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
}
② 新增类,继承AbstractObjectMorpher
public class MyTimestamp2DateMorpher extends AbstractObjectMorpher{public boolean supports(Class clazz){ return Long.class.isAssignableFrom(clazz); } public Object morph(Object value) { if( value != null){ //具体的实现方法,这里是timestamp转date,还可以用不同的String格式化的方案return new Date(Long.parseLong(String.valueOf(value))); } return null; } public Class morphsTo() { return Date.class; }
}
调用toBean前
JSONUtils.getMorpherRegistry().registerMorpher(new TimestampToDateMorpher());
这篇关于JSONUtils ToBean 时间变为默认值 解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!