转自:http://09572.iteye.com/blog/1969436
在使用Spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例:
- @RequestMapping("login")
- @ResponseBody
- public Object login(@RequestParam String username,@RequestParam String password){
- List<User> list=userDAO.findByUsername(username);
- if(list.size()>0){
- User user=list.get(0);
- if(user.getPassword().equals(password)){
- return new Result(user, "操作成功", true);
- }else{
- return new Result(null, "密码错误", true);
- }
- }else{
- return new Result(null, "用户未注册", false);
- }
- }
客户端抛出org.hibernate.LazyInitializationException异常。通过查询资料和摸索整理出三种解决方法:
第一种:(推荐)
在web.xml中加入:
- <filter>
- <filter-name>openSession</filter-name>
- <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
- <init-param>
- <param-name>singleSession</param-name>
- <param-value>false</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>openSession</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
这样返回的Spring mvc返回的Json串也包含一对多关系中的对象,不过都是空的。
- {"message":"操作成功","results":{"language":null,"id":"402881e6421e40b601421e4111c60001","type":null,"extra":null,"time":null,"username":"wanggang","msg":null,"password":"138333","tag":null,"tel":null,"qq":null,"email":null,"gender":null,"lat":null,"lang":null,"point":null,"openid":null,"city":null,"photo":null,"notes":[],"chatsForUserTwoId":[],"attentionsForUserId":[],"attentionsForAttentionUserId":[],"logs":[],"chatsForUserOneId":[],"commentsForNoteId":[],"commentsForUserId":[]},"success":true}
第二种方法(推荐):
在一对多的关系中加@JsonIgnore,这样Jackson在转换的时候就会过滤掉这个对象:
- @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
- @JsonIgnore
- public Set<Log> getLogs() {
- return this.logs;
- }
- public void setLogs(Set<Log> logs) {
- this.logs = logs;
- }
第三种方式:
把fetch模式配置成“FetchType.EAGER”,这样的方式可以解决问题,但是这样的方式会强制提取一对多关系中的数据,生成很多无用数据,也会增加系统负担,所以不建议采用。
- @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user")
- public Set<Log> getLogs() {
- return this.logs;
- }
- public void setLogs(Set<Log> logs) {
- this.logs = logs;
- }
相关推荐
jackson-datatype-hibernate, 用于处理Hibernate的Jackson JSON处理器模块( http,Add 构建 Jackson 模块( jar ) 以支持JSON序列化和反序列化 Hibernate ( http://hibernate.org ) 特定数据类型和属性,特别是延迟...
为了方便ajax调用传输数据,在struts2中加入的json插件用来做对象的序列化和反序列化,json插件的下载地址 http://code.google.com/p/jsonplugin/ 1. 下载json插件包,将jar包拷贝到WEB-INF/lib目录 注:struts2...
计划构建模块(jar)以支持JSON序列化和Hibernate( )特定数据类型和属性的反序列化; 特别是延迟加载方面。地位从2.0版开始,模块的使用和使用数量之多的开发人员和项目并不多。 注意:支持Hibernate 3.x,4.x和5....
如果使用Java,可以利用这些类,用JSON序列化库反序列化后,再配合支持JPA注解的ORM框架(例如Hibernate)持久化到数据库。 为了和JSON数据的格式一致,关联字段只声明了关联实体的主键属性,并没有写成嵌套实体类的...
序列化:JSON,二进制和XML格式; 反射(或内省):动态访问类定义,检索属性和调用类方法; HTTP Web服务器:独立的多线程HTTP 1.1 Web服务器(支持SSL / TLS,持久连接,cookie,会话,分块响应,URL调度程序/路由)...
要将对象转换为 JSON 并将 JSON 转换为对象,我们需要某种方式来序列化和反序列化。 这就是 Google 的 GSON 存在的目的。 安装 克隆存储库 在 Eclipse 中:文件 -> 导入 -> “现有 Maven 项目” 在 MySQL 中创建...
Jackson 2.4.1,用于序列化和反序列化JSON请求和响应。 Log4j 1.2.17,用于记录系统中的所有操作Sitemesh 3.0-alpha-2用于将视图(jsp页面)拆分为多个组件。对于客户: 对于员工: 对于管理员:
xml java系统源码 FUNTL FRAMEWORK 简介 Funtl Framework ...序列化与反序列化工具类 实现 Github Kaptcha 图形验证码 提供了基于 Sigar 跨平台的系统信息收集API,由C语言实现。可以收集的信息包括: CPU信
运行,你会看到 test.id 没有被序列化为 JSON。 在测试中注释掉@Entity 并重新运行。 Id 将被序列化。
包括的主题: Java 集合JavaBeans HibernateJSON、二进制和 XML 数据序列化套接字输入/输出HTTP URL 通信JUnit 安全并行处理/线程MVC模式应用程序控制器模式UML 用例图用例描述状态图序列图系统级测试
最终项目 场景-WeatherLady 系统简要说明 作为项目的一部分,应创建一个系统来从一个或两个以上的气象服务收集数据,并提供根据... JSON数据序列化/反序列化工具,例如Gson,Jackson 单元测试工具 功能性 原料药 用户
我最喜欢的 Java Google AppEngine Stack,用于基于 REST...gson - 用于 JSON 序列化 hibernate-validator - 否决来自客户端的任何丑陋数据 包含对本地“跨域”开发(CORS 标头)的支持。 现在 - 它仍然需要一些清洁。
11、什么是java序列化,如何实现java序列化? 59 12、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 60 13、java中有几种类型的流?JDK为每种类型的流...
宿舍 Dorm是一个客户端库,他可以将其连接到服务器端实现,例如 。 Dorm背后的想法是,您将实体模型(或其子集)公开给客户端应用程序,并通过服务异步加载... JSON数据的默认序列化器 实体使用库,一个扩展了Observabl
龙舌兰标签 API 模拟服务器这是一个使用框架构建的 Agave Tags API 的简单模拟服务器。 它具有通过 JPA、Hibernate 验证、通过 ... 序列化速度快如闪电。 执行内置过滤器查询的能力和不需要 DAO 是一个巨大的胜利。
{7.12}对象序列化}{117}{section.7.12} {8}多线程}{121}{chapter.8} {8.1}线程的常用属性与方法}{121}{section.8.1} {8.2}后台线程}{123}{section.8.2} {8.3}创建线程的两种方法}{123}{section.8.3} {8.4}...
第08课(讲解datagrid的查询,toolbar的多种创建方式,清空查询条件,扩展一个form序列化object的方法,load、reload方法的使用和区别,datetimebox初始化时需要注意的问题) 第09课(讲解datagrid的行编辑模式,增加、...
第三周:Java 核心Java,多线程,序列化,文件I / O,Java 8主题 第4周:SQL RDBMS,PL / SQL,JDBC 第五周:客户端HTML,CSS,JS-比SPARK更深入,另请参阅 第6周:Angular Servlet 第一次我们看到完整的堆栈...
一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...