struts2输出JSON

本文介绍如何在Struts2框架中集成JSON插件,包括配置步骤、参数详解及解决常见错误的方法。通过实例展示了如何正确配置JSON输出,以及如何避免Hibernate LazyInitializationException异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

S2SH中使用json,控制台报错:

2013-01-10 18:11:16,212 ERROR [org.hibernate.LazyInitializationException] - failed to lazily initialize a collection of role: com.xuedou.skypas.bean.Proclass.projects, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.xuedou.skypas.bean.Proclass.projects, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108)
at org.hibernate.collection.PersistentSet.equals(PersistentSet.java:429)
at java.util.Vector.indexOf(Vector.java:361)
at java.util.Vector.contains(Vector.java:320)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:114)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:329)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:228)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:165)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
at org.apache.struts2.json.JSONWriter.array(JSONWriter.java:418)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:155)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:329)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:228)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:165)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
at org.apache.struts2.json.JSONWriter.write(JSONWriter.java:99)
at org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:112)
at org.apache.struts2.json.JSONResult.execute(JSONResult.java:198)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362)

说:no session or session was closed

解决办法:在实体Bean 一对多的对象get,set 这里。 在get前加@JSON(serialize=false)。(或者在excludeProperties里排除掉相关联的对象)

如:

private Set<Project> projects;//映射的对象

@JSON(serialize=false)   //加上这个
public Set<Project> getProjects() {
	return projects;
}


struts2中运用json主要几步:

1.struts.xml中 package需要继承json-default

2.result 中 ,需要指定json类型,<result name="success" type="json"></result>


 

扩充:

struts2的json响应param类型的几种:

root:只包含xx对象
excludeProperties  :除了xx之外的集合
includeProperties : 包含xx的集合
wrapPrefix :json结果开头添加xx(比如<paramname="wrapPrefix">[</param>)
wrapSuffix :同上,只不过是结尾
ignoreHierarchy :转化时是否忽略继承关系true/false
enumAsBean : 是否将枚举当做一个bean处理
enableGZIP :是否支持gzip压缩输出
noCache :是否缓存
excludeNullProperties : 是否转化输出 null值
statusCode :设置响应代号比如 304
callbackParameter : JSONP跨域访问的回调设置
contentType : 输出类型

JSON输出时,会把Action中的所有变量( get(),set() ) 的值也同时输出,最好是指定某个集合 如:<param name="root">proclassList<param>

例如:<param name="includeProperties">proclassList\[\d+\]\.id,proclassList\[\d+\]\.proclassname</param>  取得proclassList集合中的proclassname


案例需求一:想得到teacherVO这个类中的list和count两个属性值

	 		<result name="teachersByGSC" type="json">
	 			<param name="root">teacherVO</param>
	 			<param name="includeProperties">list.*,count</param>
	 			<param name="excludeProperties">
	 				SUCCESS,
	 				list\[\d+\]\.FamousStatus,
	 				list\[\d+\]\.Flag,
	 				list\[\d+\]\.SortOrder,
	 				list\[\d+\]\.TeamStatus
	 				</param>
	 		</result>
其中excludeProperties中SUCCESS表示只要排除所有的属性(当然出了list,count),然后在单单排除list里不想要的值


参考文档:

http://struts.apache.org/2.2.3/docs/json-plugin.html (官方文档)

http://qiaolevip.iteye.com/blog/1335069

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值