`

Hibernate对象json序列化失败

 
阅读更多

转自:http://09572.iteye.com/blog/1969436

在使用Spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例:

Java代码  收藏代码
  1. @RequestMapping("login")  
  2.     @ResponseBody  
  3.     public Object login(@RequestParam String username,@RequestParam String password){  
  4.         List<User> list=userDAO.findByUsername(username);  
  5.         if(list.size()>0){  
  6.             User user=list.get(0);  
  7.             if(user.getPassword().equals(password)){  
  8.                 return new Result(user, "操作成功", true);  
  9.             }else{  
  10.                 return new Result(null, "密码错误", true);  
  11.             }  
  12.         }else{  
  13.             return new Result(null, "用户未注册", false);  
  14.         }  
  15.     }  

 客户端抛出org.hibernate.LazyInitializationException异常。通过查询资料和摸索整理出三种解决方法:

第一种:(推荐)

在web.xml中加入:

Xml代码  收藏代码
  1. <filter>  
  2.         <filter-name>openSession</filter-name>  
  3.         <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
  4.         <init-param>  
  5.             <param-name>singleSession</param-name>  
  6.             <param-value>false</param-value>  
  7.         </init-param>  
  8.     </filter>  
  9.     <filter-mapping>  
  10.         <filter-name>openSession</filter-name>  
  11.         <url-pattern>/*</url-pattern>  
  12.     </filter-mapping>  

 这样返回的Spring mvc返回的Json串也包含一对多关系中的对象,不过都是空的。

Js代码  收藏代码
  1. {"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在转换的时候就会过滤掉这个对象:

Java代码  收藏代码
  1. @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")  
  2. @JsonIgnore  
  3. public Set<Log> getLogs() {  
  4.     return this.logs;  
  5. }  
  6.   
  7. public void setLogs(Set<Log> logs) {  
  8.     this.logs = logs;  
  9. }  

 第三种方式:

把fetch模式配置成“FetchType.EAGER”,这样的方式可以解决问题,但是这样的方式会强制提取一对多关系中的数据,生成很多无用数据,也会增加系统负担,所以不建议采用。

Java代码  收藏代码
  1. @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user")  
  2.     public Set<Log> getLogs() {  
  3.         return this.logs;  
  4.     }  
  5.   
  6.     public void setLogs(Set<Log> logs) {  
  7.         this.logs = logs;  
  8.     }  
分享到:
评论

相关推荐

    jackson-datatype-hibernate, 用于处理Hibernate的Jackson JSON处理器模块( http,Add.zip

    jackson-datatype-hibernate, 用于处理Hibernate的Jackson JSON处理器模块( http,Add 构建 Jackson 模块( jar ) 以支持JSON序列化和反序列化 Hibernate ( http://hibernate.org ) 特定数据类型和属性,特别是延迟...

    struts2的json插件配置详解(附demo)

    为了方便ajax调用传输数据,在struts2中加入的json插件用来做对象的序列化和反序列化,json插件的下载地址 http://code.google.com/p/jsonplugin/ 1. 下载json插件包,将jar包拷贝到WEB-INF/lib目录 注:struts2...

    jackson-datatype-hibernate:用于处理Hibernate(http

    计划构建模块(jar)以支持JSON序列化和Hibernate( )特定数据类型和属性的反序列化; 特别是延迟加载方面。地位从2.0版开始,模块的使用和使用数量之多的开发人员和项目并不多。 注意:支持Hibernate 3.x,4.x和5....

    KanColle-JSON-Data:舰队Collection的JSON格式基础数据

    如果使用Java,可以利用这些类,用JSON序列化库反序列化后,再配合支持JPA注解的ORM框架(例如Hibernate)持久化到数据库。 为了和JSON数据的格式一致,关联字段只声明了关联实体的主键属性,并没有写成嵌套实体类的...

    QxOrm-Source 数据库操作库

    序列化:JSON,二进制和XML格式; 反射(或内省):动态访问类定义,检索属性和调用类方法; HTTP Web服务器:独立的多线程HTTP 1.1 Web服务器(支持SSL / TLS,持久连接,cookie,会话,分块响应,URL调度程序/路由)...

    REST-Services-MySQL:Spark 框架 JEE

    要将对象转换为 JSON 并将 JSON 转换为对象,我们需要某种方式来序列化和反序列化。 这就是 Google 的 GSON 存在的目的。 安装 克隆存储库 在 Eclipse 中:文件 -&gt; 导入 -&gt; “现有 Maven 项目” 在 MySQL 中创建...

    bank_web_application:Java,Spring MVC,Oracle

    Jackson 2.4.1,用于序列化和反序列化JSON请求和响应。 Log4j 1.2.17,用于记录系统中的所有操作Sitemesh 3.0-alpha-2用于将视图(jsp页面)拆分为多个组件。对于客户: 对于员工: 对于管理员:

    xmljava系统源码-framework:FUNTL框架

    xml java系统源码 FUNTL FRAMEWORK 简介 Funtl Framework ...序列化与反序列化工具类 实现 Github Kaptcha 图形验证码 提供了基于 Sigar 跨平台的系统信息收集API,由C语言实现。可以收集的信息包括: CPU信

    spring-hibernate-jackson-error

    运行,你会看到 test.id 没有被序列化为 JSON。 在测试中注释掉@Entity 并重新运行。 Id 将被序列化。

    CIT360Sandbox:Lee Barney 在 BYU-Idaho 的面向对象编程 II 课程的沙盒代码

    包括的主题: Java 集合JavaBeans HibernateJSON、二进制和 XML 数据序列化套接字输入/输出HTTP URL 通信JUnit 安全并行处理/线程MVC模式应用程序控制器模式UML 用例图用例描述状态图序列图系统级测试

    upskill-project1

    最终项目 场景-WeatherLady 系统简要说明 作为项目的一部分,应创建一个系统来从一个或两个以上的气象服务收集数据,并提供根据... JSON数据序列化/反序列化工具,例如Gson,Jackson 单元测试工具 功能性 原料药 用户

    profique:我当前的 GAE Java 堆栈

    我最喜欢的 Java Google AppEngine Stack,用于基于 REST...gson - 用于 JSON 序列化 hibernate-validator - 否决来自客户端的任何丑陋数据 包含对本地“跨域”开发(CORS 标头)的支持。 现在 - 它仍然需要一些清洁。

    Java面试宝典2020修订版V1.0.1.doc

    11、什么是java序列化,如何实现java序列化? 59 12、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 60 13、java中有几种类型的流?JDK为每种类型的流...

    dorm:dart orm客户

    宿舍 Dorm是一个客户端库,他可以将其连接到服务器端实现,例如 。 Dorm背后的想法是,您将实体模型(或其子集)公开给客户端应用程序,并通过服务异步加载... JSON数据的默认序列化器 实体使用库,一个扩展了Observabl

    agave-tags-minnal-framework:提议的龙舌兰标签 API 的模型。 此版本是使用 Minnal 框架手动生成的。 它具有完整的、生产就绪的持久性,并且开箱即用。 暂时没有提供数据

    龙舌兰标签 API 模拟服务器这是一个使用框架构建的 Agave Tags API 的简单模拟服务器。 它具有通过 JPA、Hibernate 验证、通过 ... 序列化速度快如闪电。 执行内置过滤器查询的能力和不需要 DAO 是一个巨大的胜利。

    Java学习笔记-个人整理的

    {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}...

    SYPRO示例项目源码和EasyUI入门视频教程

    第08课(讲解datagrid的查询,toolbar的多种创建方式,清空查询条件,扩展一个form序列化object的方法,load、reload方法的使用和区别,datetimebox初始化时需要注意的问题) 第09课(讲解datagrid的行编辑模式,增加、...

    1905-may28-sps-repository:批次储存库

    第三周:Java 核心Java,多线程,序列化,文件I / O,Java 8主题 第4周:SQL RDBMS,PL / SQL,JDBC 第五周:客户端HTML,CSS,JS-比SPARK更深入,另请参阅 第6周:Angular Servlet 第一次我们看到完整的堆栈...

    java开源包1

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

Global site tag (gtag.js) - Google Analytics