项目____ajax,JSONArray,数据转换异常

前端之家收集整理的这篇文章主要介绍了项目____ajax,JSONArray,数据转换异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

执行:
JSONArray array = JSONArray.fromObject(this.users);

就会报以下错误:
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

users是一个list集合

错误原因:数据库中dltime字段类型位date,向JSONArray转换时出错


方案一:

JSONArray array = JSONArray.fromObject(this.users.toArray());

项目中没有.toArray()的也都正常运行了。这次异常中此方法没有解决问题。

方案二:

因为bean里有Date字段,且从数据库里读出来的是java.sql.Date,赋值给了java.util.Date,转化成JSONArray时出错;可以在从数据库读出Date 时直接写成:new java.util.Date(rs.getDate("date").getTime),这样就不会出错了;

!!就是将出错的数据读出来转成可以正常转换的数据类型 如util.date或者string然后再转成JSON


方案三:没懂

日期格式hibernate延时加载

1.解决:日期格式

private java.util.Date createTime;

只在字段前声明Date的数据类型可能也会抛异常,在Set,get方法中,有出现Date类型的都把包名加上

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

Java 代码
    JsonConfig cfg = new JsonConfig(); cfg.setExcludes(new String[]{"handler","hibernateLazyInitializer"});

    方法举例

    Java代码
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.criterion.DetachedCriteria;
import org.springframework.transaction.annotation.Transactional;

import com.csValue.common.util.DateJsonValueProcessor;

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import net.sf.json.util.PropertyFilter;

public class test {

	@Transactional(readOnly = true)
	public JSONArray datagrid(Pager page,User user,DetachedCriteria detachedCriteria) {
		// 有级联,不能直接转化,要取出List放到map里面
		JsonConfig cfg = new JsonConfig();

		// 过滤关联,避免死循环net.sf.json.JSONException:
		// java.lang.reflect.InvocationTargetException
		cfg.setJsonPropertyFilter(new PropertyFilter() {
			public boolean apply(Object source,String name,Object value) {
				if (name.equals("addressGroup") || name.equals("user")
						|| name.equals("createTime") || name.equals("birthday")) {
					return true;
				} else {
					return false;
				}
			}
		});
		// net.sf.json.JSONException:
		// java.lang.reflect.InvocationTargetException异常
		cfg.setExcludes(new String[] { "handler","hibernateLazyInitializer" });
		// javabean里出现循环调用啦,赶快用excludes干掉parent或者children
		cfg.setExcludes(new String[] { "addressGroup" });
		// net.sf.json.JSONException:
		// java.lang.reflect.InvocationTargetException日期格式转化出错
		cfg.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
		cfg.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor(
				"yyyy-MM-dd hh:mm:ss"));
		Pager pager = this.findAllByApprove(page,user,detachedCriteria);
		long total = pager.getTotalCount();
		List list = pager.getResult();
		Map result = new HashMap();
		result.put("total",total);
		result.put("rows",list);
		JSONArray jsonArray = JSONArray.fromObject(result,cfg);
		return jsonArray;
	}

}
原文链接:https://www.f2er.com/ajax/162797.html

猜你在找的Ajax相关文章