主要是解决JSON因Hibernate映射生成的集合的转化出现的死循环问题。

这个方法很重要

     public String ajaxJsonByObjectDirecdt(Object obj, String[] filterNames){
         JsonConfig jsonConfig = new JsonConfig();
         jsonConfig.setIgnoreDefaultExcludes(false);
         jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);    //防止自包含

         if(filterNames != null){
             //这里是核心,过滤掉不想使用的属性
             jsonConfig .setExcludes(filterNames) ;
         }
         JSONObject jsonObj = JSONObject.fromObject(obj, jsonConfig);
         //ajax()方法主要功能是将数据通过输出流输出到Client
         return ajax(jsonObj.toString(), "text/html");

     }
对于参数,String[] filterNames,这个字符串数组中存放的是变量的名字(句柄),而不是变量的类型。
     public String getUserLoginInfo(){
         User user = (User)getSession().getAttribute(USER);
                 //要过滤的属性集合
         String[] filterNames =
                 new String[]{"role", "operatingHistories", "helpInfoBoards", "replyInfos",
                 "helpInfos", "credits", "users", "user",
                 "helpInfoBoard"};

         return ajaxJsonByObjectDirecdt(user, filterNames);
     }

其中User类含有以下属性:

 public class User implements java.io.Serializable {

     // Fields

     private String id;
     private Role role;
     private String username;
     private String studentNum;
     private String address;
     private Integer age;
     private String nickname;
     private String sex;
     private String qq;
     private String phonenumber;
     private String fixedTelephone;
     private String password;
     private Timestamp registerDate;
     private String imgUrl;
     private String email;
     private String question;
     private String answer;
     private Timestamp totalOnlineDate;
     private Set<OperatingHistory> operatingHistories = new HashSet<OperatingHistory>(
             0);
     private Set<HelpInfoBoard> helpInfoBoards = new HashSet<HelpInfoBoard>(0);
     private Set<ReplyInfo> replyInfos = new HashSet<ReplyInfo>(0);
     private Set<HelpInfo> helpInfos = new HashSet<HelpInfo>(0);
     private Set<Credit> credits = new HashSet<Credit>(0);

       //more methods.
 }
两端代码参照下,就知道怎么使用了。

后台异常信息:

 INFO  com.opensymphony.xwork2.config.ConfigurationManager
 Detected container provider org.apache.struts2.convention.ClasspathConfigurationProvider@67b0eb2c needs to be reloaded.  Reloading all providers.
 INFO  com.opensymphony.xwork2.config.ConfigurationManager
 Detected package provider org.apache.struts2.convention.ClasspathConfigurationProvider@67b0eb2c needs to be reloaded.  Reloading all providers.
 INFO  com.opensymphony.xwork2.config.ConfigurationManager
 Detected package provider org.apache.struts2.convention.ClasspathConfigurationProvider@31af5c3 needs to be reloaded.  Reloading all providers.
 INFO  com.opensymphony.xwork2.config.ConfigurationManager
 Detected package provider org.apache.struts2.convention.ClasspathPackageProvider@5efcd6cc needs to be reloaded.  Reloading all providers.
 INFO  com.opensymphony.xwork2.config.providers.XmlConfigurationProvider
 Parsing configuration file [struts-default.xml]
 INFO  com.opensymphony.xwork2.config.providers.XmlConfigurationProvider
 Parsing configuration file [struts-plugin.xml]
 INFO  com.opensymphony.xwork2.config.providers.XmlConfigurationProvider
 Parsing configuration file [struts.xml]
 INFO  com.opensymphony.xwork2.config.impl.DefaultConfiguration
 Overriding property struts.i18n.reload - old value: false new value: true
 INFO  com.opensymphony.xwork2.config.impl.DefaultConfiguration
 Overriding property struts.configuration.xml.reload - old value: false new value: true
 INFO  org.apache.struts2.config.BeanSelectionProvider
 Loading global messages from i18n
 INFO  org.apache.struts2.spring.StrutsSpringObjectFactory
 Initializing Struts-Spring integration...
 INFO  com.opensymphony.xwork2.spring.SpringObjectFactory
 Setting autowire strategy to name
 INFO  org.apache.struts2.spring.StrutsSpringObjectFactory
 ... initialized Struts-Spring integration successfully
 2014-06-03 01:07:12 Test: Reloading class 'student.life.support.platform.action.BaseAction'.
 hql:from student.life.support.platform.model.User as model where model.username = ?
 Hibernate:
     select
         user0_.id as id62_,
         user0_.address as address62_,
         user0_.age as age62_,
         user0_.answer as answer62_,
         user0_.email as email62_,
         user0_.fixed_telephone as fixed6_62_,
         user0_.img_url as img7_62_,
         user0_.nickname as nickname62_,
         user0_.password as password62_,
         user0_.phonenumber as phonenu10_62_,
         user0_.qq as qq62_,
         user0_.question as question62_,
         user0_.register_date as register13_62_,
         user0_.role_id as role18_62_,
         user0_.sex as sex62_,
         user0_.student_num as student15_62_,
         user0_.total_online_date as total16_62_,
         user0_.username as username62_
     from
         studentlifesupportplatform.user user0_
     where
         user0_.username=?
 WARN  net.sf.json.JSONObject
 Property 'handler' has no read method. SKIPPED
 Hibernate:
     select
         role0_.id as id61_0_,
         role0_.role_permissions as role2_61_0_,
         role0_.role_type as role3_61_0_
     from
         studentlifesupportplatform.role role0_
     where
         role0_.id=?
 Hibernate:
     select
         users0_.role_id as role18_1_,
         users0_.id as id1_,
         users0_.id as id62_0_,
         users0_.address as address62_0_,
         users0_.age as age62_0_,
         users0_.answer as answer62_0_,
         users0_.email as email62_0_,
         users0_.fixed_telephone as fixed6_62_0_,
         users0_.img_url as img7_62_0_,
         users0_.nickname as nickname62_0_,
         users0_.password as password62_0_,
         users0_.phonenumber as phonenu10_62_0_,
         users0_.qq as qq62_0_,
         users0_.question as question62_0_,
         users0_.register_date as register13_62_0_,
         users0_.role_id as role18_62_0_,
         users0_.sex as sex62_0_,
         users0_.student_num as student15_62_0_,
         users0_.total_online_date as total16_62_0_,
         users0_.username as username62_0_
     from
         studentlifesupportplatform.user users0_
     where
         users0_.role_id=?
 WARN  net.sf.json.JSONObject
 Property 'transactionTimeout' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'URL' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'array' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'asciiStream' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'bigDecimal' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'binaryStream' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'blob' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'boolean' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'byte' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'bytes' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'characterStream' has no read method. SKIPPED
 WARN  net.sf.json.JSONObject
 Property 'clob' has no read method. SKIPPED
 ERROR  freemarker.runtime
 Method public java.lang.String org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
 Method public java.lang.String org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
 The problematic instruction:
 ----------
 ==> ${msg[0]} [on line 68, column 29 in org/apache/struts2/dispatcher/error.ftl]
 ----------

 Java backtrace for programmers:
 ----------
 freemarker.template.TemplateModelException: Method public java.lang.String org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
     at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)
     at freemarker.ext.beans.SimpleMethodModel.get(SimpleMethodModel.java:138)
     at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:111)
     at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:90)
     at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
     at freemarker.core.Expression.getStringValue(Expression.java:93)
     at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
     at freemarker.core.Environment.visit(Environment.java:210)
     at freemarker.core.MixedContent.accept(MixedContent.java:92)
     at freemarker.core.Environment.visit(Environment.java:210)
     at freemarker.core.IfBlock.accept(IfBlock.java:82)
     at freemarker.core.Environment.visit(Environment.java:210)
     at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
     at freemarker.core.Environment.visit(Environment.java:417)
     at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
     at freemarker.core.Environment.visit(Environment.java:210)
     at freemarker.core.MixedContent.accept(MixedContent.java:92)
     at freemarker.core.Environment.visit(Environment.java:210)
     at freemarker.core.IfBlock.accept(IfBlock.java:82)
     at freemarker.core.Environment.visit(Environment.java:210)
     at freemarker.core.MixedContent.accept(MixedContent.java:92)
     at freemarker.core.Environment.visit(Environment.java:210)
     at freemarker.core.Environment.process(Environment.java:190)
     at freemarker.template.Template.process(Template.java:237)
     at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:797)
     at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:519)
     at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
     at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
     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:243)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
     at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:123)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
     at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:171)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
     at java.lang.Thread.run(Thread.java:662)
 Caused by: java.lang.NullPointerException
     at freemarker.ext.beans.SimpleMemberModel.unwrapArguments(SimpleMemberModel.java:85)
     at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:106)
     ... 49 more
 2014-6-3 1:07:12 org.apache.catalina.core.StandardWrapperValve invoke
 严重: Servlet.service() for servlet [default] in context with path [/StudentLifeSupportPlatformSystem] threw exception
 java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
     at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:451)
     at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:801)
     at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:519)
     at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
     at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
     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:243)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
     at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:123)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
     at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:171)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
     at java.lang.Thread.run(Thread.java:662)

欢迎讨论交流, 我的主页:http://www.cnblogs.com/GDUT/

我的邮箱:zone.technology.exchange@gmail.com

JAVA对象转化JSON出现死循环问题的更多相关文章

  1. java对象与Json字符串之间的转化(fastjson)

    1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <art ...

  2. java对象与Json字符串之间的转化

    public class Test { public static void main(String[] args) { // 实现java对象与Json字符串之间的转化 // 1. Person对象 ...

  3. jackson java对象和json对象的互相转换

    概述 Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”. Jackson框架包含了3个核心库:streaming,databind,annotation ...

  4. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

  5. java对象与json串互转

    1:java对象与json串转换: java对象—json串: JSONObject JSONStr = JSONObject.fromObject(object); String str = JSO ...

  6. java对象与json对象间的相互转换

    工程中所需的jar包,因为在网上不太好找,所以我将它放到我的网盘里了,如有需要随便下载. 点击下载 1.简单的解析json字符串 首先将json字符串转换为json对象,然后再解析json对象,过程如 ...

  7. ason 和 Java 对象转化示例

    1.工程 2.代码: JsonUtil.java package com.my.json; import java.util.ArrayList; import java.util.List; imp ...

  8. JSON-lib框架,JAVA对象与JSON、XML之间的相互转换

    Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作 ...

  9. java对象转json应clone,避免生成json串有问题

    今天因为一个java对象转json,搞了我一下午,在些记录一下: 是这样:我在strtuts2的action中调用services返回 Row: 26, 中国银行海鹰, 29, 东楼, 36, 1F ...

随机推荐

  1. iOS 关于僵尸对象和僵尸指针的那些事儿

    引言 提到僵尸就感到一种恐怖,大家都知道“僵尸”是没有生命的,但是它确实是一种存在的类似生命体的一种生物.哈哈,当然本文的重点不是讨论“僵尸”,而是有关于ios当中经常遇到的僵尸指针(Zombie P ...

  2. 分布式HBase-0.98.4环境搭建

    fesh个人实践,欢迎经验交流!Blog地址:http://www.cnblogs.com/fesh/p/3804072.html 本文有点简单,详细版本请参见<分布式Hbase-0.98.4在 ...

  3. 使用C# WinForm制作 员工打卡项目 -- S2 2.3

    新建一个员工类,存储员工的信息 新建一个List<>集合,并在load事件中实例化三个员工对象 DataGridView绑定数据源,可以显示出数据 点击查询按钮,查询工号等同于输入的数的员 ...

  4. 开源PLM软件Aras详解四 ItemType的概念

    首先,我们需要了解什么是ItemType,俗称对象类 官方一点就是ItemType是一个用来定义业务对象类的业务对象类 通过ItemType定义的每个业务对象类可以产生各自的实例对象 通过ItemTy ...

  5. Oracle 10g -- 修改DB的编码

    修改DB的原因是:因为我的DB不支持中文,所以每当我向数据库表中插入一条数据的时候,中文就都变了类似于“?(是反问号)”的乱码,为了能顺利插入成功,故做了此次修改; 系统:windows XP 英文版 ...

  6. [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR

    Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...

  7. 编写出色的GNU/Linux程序

    http://advancedlinuxprogramming.com提供了本书电子版的免费下载. 1 与执行环境交互 关于参数 C语言程序的main()函数使用两个参数和执行环境交互--(int)a ...

  8. upgrade-php-5-1-to-php-5-3-using-yum-on-centos

    wget -q -O - http://www.atomicorp.com/installers/atomic | shyum upgrade phpyum -y remove atomic-rele ...

  9. pushlet实现服务器端向客户端推送信息

    使用Pushlet来实现服务器端向客户端推送信息 1.   实现方式: 有两种实现方式: 1.         通过配置文件来实现定时的从服务器端向客户端推送信息 2.         通过API主动 ...

  10. 内存管理运算符new delete与内存管理函数malloc free的区别——已经他们对对象创建的过程。

    (1)内存管理函数与内存管理运算符的区别 内存管理函数有内存分配函数,malloc calloc realloc 以及内存释放函数free. 内存管理运算符有new 和delete. 两种内存管理方式 ...