加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:50:34 所属栏目:百科 来源:网络整理
导读:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException 博客分类: json .net Java json Hibernate 利用json-lib把对象转化为JsonObject对象时抛出net.sf.json.JSONException: java.lang.reflect.InvocationTargetException异常 这个异常

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

    博客分类:
  • json
.net Java json Hibernate
利用json-lib把对象转化为JsonObject对象时抛出net.sf.json.JSONException: java.lang.reflect.InvocationTargetException异常

这个异常一般是如下三种情况造成的:

  1. 对象中存在属性为Date类型或Date的子类型(如java.sql.Date和TimeStamp等)
  2. hibernate延时加载
  3. 关联的记录不存在

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代码
  1. JsonConfigjsonConfig =newJsonConfig();
  2. jsonConfig.setExcludes(newString[]{"handler","hibernateLazyInitializer"});

  3. 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,删掉不合法的数据

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读