hibernate+json报no session

本文深入探讨了在使用Spring框架处理数据库操作时,特别是涉及包含外键的实体对象(PO)时,如何通过在web.xml配置文件中启用OpenSessionInViewFilter来实现懒加载模式下session的持久化。详细介绍了配置步骤,包括在Struts过滤器前设置,以及在实际应用中如何利用write方法高效地进行数据输出,并提供了防止JSON嵌套导致的死循环的解决方案。

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

含有外键的po,采用lazy加载模式时,session会在进入service(action)前关闭。

方案1:

可在web.xml中配置:

<!-- 延迟加载 -->

<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

注意要配置在struts的过滤器前。

方案2:

public <T> void write(List<T> list,String... values){

String [] ignore=null;

HttpServletResponse response = ServletActionContext.getResponse();

response.setContentType("text/html;charset=UTF-8");

response.setCharacterEncoding("UTF-8");// 防止弹出的信息出现乱码

PrintWriter writer=null;

try {

writer = response.getWriter();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

JsonConfig jsonConfig = new JsonConfig();

jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

if (values != null) {

ignore =new String[values.length];

for (int i = 0; i < values.length; i++) {

ignore[i]=values[i];

}

}

jsonConfig.setExcludes(ignore);

JSONArray json =JSONArray.fromObject(list, jsonConfig);

//防止因嵌套产生的死循环


System.out.println(json);

writer.print(json);

}

jsonConfig.setExcludes(ignore);为给json添加过滤字段。


转载于:https://my.oschina.net/u/2286010/blog/635514

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值