0 0

JSON to JavaBean 中的 Timestamp5

将一个javaBean转换成json格式如下:
{"bqBm":"123","bqMc":"tset","bqlxBm":"","fqbm":"","lxdjq":0,"qssj":"2010-05-14 18:33:59.546","sfdq":0,"sfkj":0,"zzsj":"2010-05-14 18:33:59.546"}
现在需要把这个json转换成对应的JavaBean,在javaBean中qssj 时间和zzsj的定义为Timestamp,
在转换过程前添加了代码:
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] { "yyyy-MM-dd","yyyy-MM-dd HH:mm:ss" }));
但后台还是抱错了,错误如下:
0    [2010-05-14 18:33:59,859] [main] WARN  [net.sf.json.JSONObject.morphPropertyValue(JSONObject.java:1454)] - Can't transform property 'qssj' from java.lang.String into java.sql.Timestamp. Will register a default Morpher
net.sf.json.JSONException: Error while setting property=qssj type class java.lang.String
at net.sf.json.JSONObject.toBean(JSONObject.java:486)
at net.sf.json.JSONObject.toBean(JSONObject.java:253)
at com.test.Test.main(Test.java:293)
Caused by: net.sf.ezmorph.MorphException: java.sql.Timestamp
at net.sf.ezmorph.bean.BeanMorpher.morph(BeanMorpher.java:136)
at net.sf.ezmorph.MorpherRegistry.morph(MorpherRegistry.java:167)
at net.sf.json.JSONObject.morphPropertyValue(JSONObject.java:1464)
at net.sf.json.JSONObject.toBean(JSONObject.java:385)
... 2 more
Caused by: java.lang.InstantiationException: java.sql.Timestamp
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at net.sf.ezmorph.bean.BeanMorpher.morph(BeanMorpher.java:92)
... 5 more
现在的问题就是怎么让json中的日期字符串在转换成javaBean的时候映射成java.sql.Timestamp类型。

问题补充:
cwx714 写道
json-lib默认不支持java.sql.Date的序列化,要序列化自己的类,实现一个BeanProcessor处理即可。
public class MyDateJsonBeanProcessor implements net.sf.json.processors.JsonBeanProcessor
{

    public JSONObject processBean( Object bean, JsonConfig jsonConfig ) {
          JSONObject jsonObject = null;
          System.out.println("processor class name:"+bean.getClass().getName());
          if( bean instanceof java.sql.Date ){
             bean = new Date( ((java.sql.Date) bean).getTime() );
          }
          if( bean instanceof java.sql.Timestamp ){
            System.out.println("bean timestamp");
            bean = new Date( ((java.sql.Timestamp) bean).getTime() );
          }
          if( bean instanceof Date ){
             jsonObject = new JSONObject();
             jsonObject.element("time", ( (Date) bean ).getTime());
          }else{
             jsonObject = new JSONObject( true );
          }
          return jsonObject;
       }
}

你好,上面的这个类具体的怎么用呢, 我用了如下方式还是不行:
1、JsonConfig cfg = new JsonConfig();
  MyDateJsonBeanProcessor processor = new MyDateJsonBeanProcessor();
jsonConfig.registerJsonBeanProcessor(java.sql.Date.class, processor);
jsonConfig.registerJsonBeanProcessor(java.sql.Timestamp.class, processor);
jsonObject = JSONObject.fromObject(str,jsonConfig);
Object obj = JSONObject.toBean(jsonObject, BqXx.class);
2、jsonObject = JSONObject.fromObject(str,jsonConfig);
BqXx bqXx = new BqXx();
Object obj = JSONObject.toBean(jsonObject,bqXx,jsonConfig);
两种方式都不行啊,请教你是怎么运用MyDateJsonBeanProcessor 类的。
2010年5月14日 19:09

3个答案 按时间排序 按投票排序

0 0

我也遇到了同样的问题 只能处理 java。util。date日期型字段  java.sql.date 不知道为什么不支持!
有解决方法告诉我下  把java。sql。date改成java.util,date这种方式就不用告诉我了
QQ 1435648802

2014年5月22日 18:47
0 0

使用JsonConfig配置json转化.

JsonConfig cfg = new JsonConfig();
		   cfg.registerJsonValueProcessor(java.util.Date.class,new JsonValueProcessor() {
		    private final String format="yyyy-MM-dd";
		    public Object processObjectValue(String key, Object value,
		      JsonConfig arg2)
		    {
		     if(value==null)
		      return "";
		     if (value instanceof Date) {
		      String str = new SimpleDateFormat(format).format((Date) value);
		      return str;
		     }
		     return value.toString();
		    }

		    public Object processArrayValue(Object value, JsonConfig arg1)
		    {
		     return null;
		    }
		   });
		
		Collection<JsonBean> list = JSONArray.toCollection(JSONArray.fromObject(jsonStr,cfg ), JsonBean.class);   
		
		JSONArray json = JSONArray.fromObject(votes,cfg); 

2010年5月14日 19:35
0 0

json-lib默认不支持java.sql.Date的序列化,要序列化自己的类,实现一个BeanProcessor处理即可。

public class MyDateJsonBeanProcessor implements net.sf.json.processors.JsonBeanProcessor
{

    public JSONObject processBean( Object bean, JsonConfig jsonConfig ) {
          JSONObject jsonObject = null;
          System.out.println("processor class name:"+bean.getClass().getName());
          if( bean instanceof java.sql.Date ){
             bean = new Date( ((java.sql.Date) bean).getTime() );
          }
          if( bean instanceof java.sql.Timestamp ){
            System.out.println("bean timestamp");
            bean = new Date( ((java.sql.Timestamp) bean).getTime() );
          }
          if( bean instanceof Date ){
             jsonObject = new JSONObject();
             jsonObject.element("time", ( (Date) bean ).getTime());
          }else{
             jsonObject = new JSONObject( true );
          }
          return jsonObject;
       }
}

2010年5月14日 19:14

相关推荐

Global site tag (gtag.js) - Google Analytics