您的位置:首页 > 编程语言 > Java开发

net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

2014-01-17 14:14 447 查看


net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

博客分类: 

json.netJavajsonHibernate 

利用json-lib把对象转化为JsonObject对象时抛出net.sf.json.JSONException: java.lang.reflect.InvocationTargetException异常


 

这个异常一般是如下三种情况造成的:
对象中存在属性为Date类型或Date的子类型(如java.sql.Date和TimeStamp等)
hibernate延时加载
关联的记录不存在

1,解决:日期 

定义一个类,实现JsonValueProcessor,重写方法 

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
* @author Rick
*
*/
public class JSONDateValueProcessor implements JsonValueProcessor {
private String format = "yyyy-MM-dd hh:mm:ss";

public Object processArrayValue(Object value, JsonConfig config) {
return process(value);
}

public Object processObjectValue(String key, Object value, JsonConfig config) {
return process(value);
}

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对象时,按如下

JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JSONDateValueProcessor());

Map<String, Object> map=new HashMap<String,Object>();
map.put("sites",sites);
map.put("total",count);

json=JSONObject.fromObject(map,jsonConfig);

2,解决:hibernate延时加载 设置

Java代码  


JsonConfig jsonConfig = new JsonConfig();  

jsonConfig.setExcludes(new String[]{"handler","hibernateLazyInitializer"});

JSONObject json=JSONObject.fromObject(map,jsonConfig)

3,解决:关联记录不存在
如果异常中有存在
No row with the given identifier exists: [com.xxx.XXX#001]
   这样的信息存在,那造成的原因就是由于关联的记录不存在造成的,如A和B一对多,在B中配置属性a,如果关联记录的a不存在的话会出现这个异常。
   解决办法1,在关联上配置not-found='ignore'
          2,删掉不合法的数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate 异常 json