Json转换报错java.lang.IllegalArgumentException的解决方案!

json转换报错:

java.lang.IllegalArgumentException

java.sql.Date.getHours

......

 

这是由于于java.util.Date 和 java.sql.Date的转换问题造成的。

第一种解决方案,如果数据库中存储的是时间类型的话,就把hibernate的*.hbm.xml文件中的时间类型改成时间类型java.sql.Date改成java.util.Date。或者直接换成java.sql.Timestamp都成。

 

 

第二种如果某些情况数据库中存储的就是日期型的东西,没办法这种转换就可以采用如下方法——采用通过JsonConfig注册对应的Date类型java.sql.Date;

//定义配置文件,并且注册时间类型
 
JsonConfig jsonConfig = new JsonConfig(); 
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); 

//resolve  java.lang.IllegalArgumentException java.sql.Date.getHours(Date.java:177)
jsonConfig.registerJsonBeanProcessor(java.sql.Date.class, new DateJsonValueProcessor());
 
//resolve  java.sql.SQLException: Positioned Update not supported. 
jsonConfig.setExcludes(new String[]{"handler","hibernateLazyInitializer"});  
//进行转换操作
JSONArray.fromObject(list,jsonConfig); 

 
 
//重载类型 
class DateJsonValueProcessor implements JsonBeanProcessor { 

    public JSONObject processBean(Object bean, JsonConfig arg1) { 
        JSONObject jsonObject = null; 
            if( bean instanceof java.sql.Date ){ 
               bean = new Date( ((java.sql.Date) bean).getTime() ); 
            } 
            if( bean instanceof java.sql.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; 
       } 
}


 

你可能感兴趣的:(Java,Web)