浏览 4580 次
锁定老帖子 主题:用json时的一个问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-19
public class Person{ private java.util.Date birthday; // settor and gettor methods..... } 现在客户端那边传来如下的json规则的字符串String personJson = "{birthday:\"06/28/2008 17:00:00\"}",要用 JSONOjbect.toBean(JSONObject.from(personJson ),Person.class)方法来获得相应的Person实例时就出问题了,报错如下: [align=center]2008-6-19 13:57:39 net.sf.json.JSONObject morphPropertyValue 警告: Can't transform property 'birthday' from java.lang.String into java.util.Date. Will register a default Morpher 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 信息: Property 'java.util.Date.class' has no write method. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.date' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 信息: Property 'java.util.Date.day' has no write method. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.hours' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.minutes' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.month' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.seconds' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.time' does not exist. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 信息: Property 'java.util.Date.timezoneOffset' has no write method. SKIPPED. 2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph 警告: Property 'java.lang.String.year' does not exist. SKIPPED. Person's brithday: Thu Jun 19 13:57:39 CST 2008 [/align] 注意这里虽然有"Person's brithday: Thu Jun 19 13:57:39 CST 2008 "这样输出,但它的时间值与输入不符. 这个怎么解决? 以下是我做实验用的Java代码: ======================= package json; import java.util.Date; import net.sf.json.JSONObject; public class Person { private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public static Person getInstance(String jsonVale) { return (Person)JSONObject.toBean(JSONObject.fromObject(jsonVale),Person.class); } public static void main(String[] args) { String personJson = "{birthday:\"06/28/2008 17:00:00\"}"; Person p = getInstance(personJson); System.out.println("Person's brithday: "+ p.getBirthday()); } } ==== 所需Jar包见附件. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-19
这是因为你在json中的字符串类型的"06/28/2008 17:00:00"
在java中没有办法直接转换成为Date类型的数据.因而报出了异常 你需要通过JsonValueProcessor类,进行日期的转换格式. 解决方法可以参见: [url]http://bolingsky.blog.sohu.com/74165282.html [/url] 里面有详细描述. |
|
返回顶楼 | |
发表时间:2008-08-06
class MapToDateMorpher extends AbstractObjectMorpher { //https://sourceforge.net/forum/forum.php?thread_id=1861466&forum_id=587134 private static String DATE_TIME_FORMAT = "MM/dd/yyyy HH:mm:ss"; static SimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT); static TimeZone pstTimeZone = TimeZone.getTimeZone("PST"); public Object morph(Object value) { if(value instanceof String) { String s = (String)value; return convertStringToTimestamp(s); } return null; } public Class morphsTo() { return Date.class; } public boolean supports(Class clazz) { // return clazz.equals(String.class); return String.class.isAssignableFrom( clazz ); } private Date convertStringToTimestamp(String input){ if(!StringUtils.isEmpty(input)){ try { return dateTimeFormat.parse(input); } catch (ParseException e) { } } return null; } } |
|
返回顶楼 | |