原因分析在解析bean时,出现死循环调用,即多个bean之间出现了相互调用.解决方法:将关联关系中实体对象间的lazy属性设为false过滤掉bean中引起死循环调用的属性。
//采用数组的方式过滤关联的实体对象
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setIgnoreDefaultExcludes(false);
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
jsonConfig.setExcludes(new String[] { "articleComment", "article",
"commentator" });
// 我自己的部分代码
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "bdBanktype", "parent", "createBy",
"createDate", "updateBy", "updateDate", "currentUser", "page","sqlMap" });
JSONArray jsonArray = JSONArray.fromObject(list, config);
public Object andleBody(ProceedingJoinPoint pjp) throws Throwable {
Object retVal = pjp.proceed(); // 连接点方法返回值
if (retVal instanceof Map) {
Map<String, Object> instance = new HashMap<String, Object>();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//bindResult里面的有些内容解析不了,忽略对应的bindResult对象里面的内容,就可以了
jsonConfig.setExcludes(new String[] { "beanWrapper","propertyType","writeMethod","writeMethodParameter",
"conversionService", "errors", "messageCodesResolver","supperessedFields","beanPropertyBindingResult",
"nestedPathStack", "beanClass","target","propertyEditorClass","readMethod","writeMethodForActualAccess" });
instance.put("req_data",
JSONArray.fromObject(pjp.getArgs(), jsonConfig).toString());
instance.put("res_data", JSONObject.fromObject(retVal).toString());
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
instance.put("req_source", pjp.getSignature().toString());
instance.put("req_path", request.getRequestURI());
instance.put("inf_enabeld", "1");
instance.put("req_addr", request.getRemoteAddr());
commonService.insertInfConfig(instance);
@SuppressWarnings({ "unchecked" })
Map<String, Object> retMap = (Map<String, Object>) retVal;
retMap.put("instance_id", instance.get("id"));
return retMap;
}
return retVal;
}