解决ArrayList转换json异常问题(activiti)

在使用activiti框架的时候,在向后台展示页面时,会出现如下错:
在这里插入图片描述
首先我们分析报错原因:
产生原因是 list 转失败了
为什么失败:
在这里插入图片描述
这里是一个接口,必然有一个实现类,实现类中有这么一个字段:
在这里插入图片描述
原理分析:
他是一个懒加载对象,所以说,有一个作用域范围,在service层里面拿到数据库里面的session还在,但是到了controller已经不在了,
而此时是@ResponseBody(JSON序列化) 在调用,一旦session不在,这个懒加载对象就加载不出来了

解决方法:
map其实就是实体类,既然是个实体类,那么就可以传入一个map
在这里插入图片描述
代码这样写就可以了:
在这里插入图片描述

如果字段比较多,一次次的添加就显得很麻烦,就需要自己创建一个工具类了

@Override
	public List<Map<String, Object>> queryPdList() {
		// 查询对象
		ProcessDefinitionQuery createProcessDefinitionQuery = repositoryService.createProcessDefinitionQuery();
		// 封装的列表map 代替 实体类 ProcessDefinition (因为 ProcessDefinitionEntity
		// List<IdentityLinkEntity> definitionIdentityLinkEntities 懒加载对象 )
		List<Map<String, Object>> listMap = new ArrayList<>();
		// 目标类
		List<ProcessDefinition> list = createProcessDefinitionQuery.list();
		// 循环
		String[] ps = { "id", "name", "version", "key", "diagramResourceName", "resourceName", "deploymentId",
				"suspensionState" };
		for (ProcessDefinition pd : list) {
			// Map<String, Object> map=new HashMap<>();
			// map.put("id", pd.getId());
			// map.put("name", pd.getName());
			Map<String, Object> map = CommUtil.obj2map(pd, ps);
			listMap.add(map);
		}
		return listMap;
	}

工具类代码如下:

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.BeanUtils;

public class CommUtil {

/**
 * 把指定的复杂对象属性,按照指定的内容,封装到新的map中
 * @param source 目标对象
 * @param ps     需要封装到map中的属性
 * @return
 */
public static Map<String, Object> obj2map(Object source, String[] ps) {
	Map<String, Object> map = new HashMap<>();
	if (source == null)
		return null;
	if (ps == null || ps.length < 1) {
		return null;
	}
	for (String p : ps) {
		PropertyDescriptor sourcePd = BeanUtils.getPropertyDescriptor(
				source.getClass(), p);
		if (sourcePd != null && sourcePd.getReadMethod() != null) {
			try {
				Method readMethod = sourcePd.getReadMethod();
				if (!Modifier.isPublic(readMethod.getDeclaringClass()
						.getModifiers())) {
					readMethod.setAccessible(true);
				}
				Object value = readMethod.invoke(source, new Object[0]);
				map.put(p, value);
			} catch (Exception ex) {
				throw new RuntimeException(
						"Could not copy properties from source to target",
						ex);
			}
		}
	}
	return map;
}


}

希望此文章对您有所帮助,您的点赞就是对博主最大的支持.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值