zoukankan      html  css  js  c++  java
  • net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案

    net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案

    今天在用List集合转换成json数组的时候发生了这个错误,这个错误的意思就是说:我要转换成json数组的对象中含有对象嵌套引用。

    使用hibernate容易出现该问题,主要是由于pojo类属性存在级联关系。比如说员工和部门,在员工表里面有部门属性,而在部门表里面有个员工集合,这样就存在了嵌套引用的问题了,就会抛出这个异常。

    解决方法很简单,在将每个对象转为json对象的时候用setExcludes函数将级联的属性去除掉就可以了,如下面:

    //得到所有部门
        //返回json对象字符串
        public String getAllDep(){
            List list = deptDAO.findAll();
            JsonConfig config = new JsonConfig();
            config.setExcludes(new String[]{"emps"});//除去emps属性
            String json = JSONArray.fromObject(list, config).toString();
            return json;
        }
        
        //得到所有员工
        public String getAllEmp(int id){
            List list = empDAO.findByProperty("dept.deptId", id);
            JsonConfig config = new JsonConfig();
            config.setExcludes(new String[]{"dept"});//除去dept属性
            String json = JSONArray.fromObject(list, config).toString();
            return json;
        }

    异常代码如下:

    严重: Servlet.service() for servlet springMVC threw exception
    net.sf.json.JSONException: There is a cycle in the hierarchy!
        at net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.handleRepeatedReferenceAsObject(CycleDetectionStrategy.java:97)
        at net.sf.json.JSONObject._fromBean(JSONObject.java:857)
        at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
        at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
        at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
        at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
        at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
        at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
        at net.sf.json.JSONArray._processValue(JSONArray.java:2557)
        at net.sf.json.JSONArray.processValue(JSONArray.java:2588)
        at net.sf.json.JSONArray.addValue(JSONArray.java:2575)
        at net.sf.json.JSONArray._fromCollection(JSONArray.java:1082)
        at net.sf.json.JSONArray.fromObject(JSONArray.java:145)
        at net.sf.json.JSONObject._processValue(JSONObject.java:2749)
        at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
        at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
        at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
        at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
        at net.sf.json.JSONArray._processValue(JSONArray.java:2557)
        at net.sf.json.JSONArray.processValue(JSONArray.java:2588)
        at net.sf.json.JSONArray.addValue(JSONArray.java:2575)
        at net.sf.json.JSONArray._fromCollection(JSONArray.java:1082)
        at net.sf.json.JSONArray.fromObject(JSONArray.java:145)
        at com.service.EmpService.getAllDep(EmpService.java:31)
        at com.service.EmpService$$FastClassByCGLIB$$fef4bb53.invoke(<generated>)
        at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
        at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
        at com.service.EmpService$$EnhancerByCGLIB$$8fce1d77.getAllDep(<generated>)
        at com.action.DepAction.getAllDept(DepAction.java:22)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:413)
        at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:134)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:310)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:297)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:722)

     来自:http://www.cnblogs.com/liuling/archive/2013/02/07/dasfdf.html

  • 相关阅读:
    Proj THUDBFuzz Paper Reading: PMFuzz: Test Case Generation for Persistent Memory Programs
    入围 WF 后训练记
    算法竞赛历程
    2021 多校 杭电 第十场
    2021 多校 杭电 第九场
    2021 多校 牛客 第十场
    2021 多校 牛客 第九场
    2021 多校 杭电 第八场
    2021 多校 杭电 第六场
    2021 多校 杭电 第七场
  • 原文地址:https://www.cnblogs.com/JamKong/p/4497614.html
Copyright © 2011-2022 走看看