今天在运用jq 的 ajax技术 从servlet请求来json数据时遇到的一些问题:
在Servlet类进行数据转化代码如下:
JSONArray jsonArray = JSONArray.fromObject(schools);
response.getWriter().println(jsonArray);
按照以上代码运行 出现了 异常.
原因是运用net.sf.json.*时,在web应用中缺少了相应的包.
在tomcat lib 下一查. 发现缺少 ezmorph-1.0.6.jar 包.
导入之后.继续运行程序,出现了一系列hibernate lazy懒加载的错误.
原因是我的School 对象 与 StudentManger、Student 皆有相互关联关系,且默认lazy不为false.
于是我傻呵呵地将一个一个School中的对象在相应的hbm.xml中相应映射关系的lazy设置为false.
又发现了一个问题. StudentManger与Student又与其它类有着关联,又回到了刚刚阐述的问题.
那么是否为了得到JSON对象,我就得加载School对象时,同时加载那些我不关心的属性(如:students、studentMangers)呢? 在网上一查,发现了一系列解决方法.
以下解决方法我认为最为合适.
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setIgnoreDefaultExcludes(false);
jsonConfig.setExcludes(new String[]{"schoolManagers","students"});//需要排除的属性的名称
JSONArray jsonArray = JSONArray.fromObject(schools,jsonConfig);
response.setCharacterEncoding("utf-8");
response.getWriter().println(jsonArray);