在使用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;
}
分享到:
相关推荐
在Java中,可以使用Jackson、Gson等库来序列化和反序列化Java对象为JSON格式,以便于网络传输。 结合这四个技术,开发者可以创建出高性能、模块化的Web应用程序。Spring MVC处理HTTP请求,调用由Spring管理的业务...
7. 使用Jackson库进行JSON序列化与反序列化:在需要的地方引入Jackson库,通过 ObjectMapper 进行对象与JSON字符串的转换。 8. 处理文件上传:如果需要支持文件上传,可以使用Commons FileUpload库,结合Spring MVC...
DWR处理了JSON或XML的序列化和反序列化,简化了跨域通信问题。 **Dojo** 是一个JavaScript工具库,提供了丰富的UI组件、动画效果和数据绑定等功能,有助于创建交互式的Web应用。在这个Demo中,Dojo可能被用来创建...
DWR支持异步更新,提供了自动化的JSON和XML序列化,简化了前后端的数据交换。 **EXTJS** EXTJS提供了大量的预定义UI组件,如表格、表单、面板、树形视图等,这些组件具有高度可配置和可扩展性。EXTJS的布局管理器...
标题中的"springmvc_hibernate+json lib包"表明这是一个与Spring MVC、Hibernate和JSON相关的库文件集合。在Java开发领域,这三大技术是构建Web应用程序的重要组件。让我们深入了解一下它们各自的功能以及它们如何...
5. `jackson-all-1.7.6.jar`:Jackson库用于JSON序列化和反序列化,使Java对象可以轻松转换为JSON格式,反之亦然。在Spring MVC中,这常用于处理HTTP请求和响应的数据交换。 6. `spring-webmvc-4.3.7.RELEASE.jar` ...
- `jackson-databind`是Jackson库的一部分,用于JSON序列化和反序列化,常用于前后端数据交换。 - `spring-webmvc`是Spring MVC框架的实现,用于处理Web请求和响应。 - `freemarker-2.3.15.jar`是FreeMarker模板...
5. JSON处理库:如jackson-databind、gson等,用于JSON序列化和反序列化。 6. 可能还有其他依赖,如slf4j(Simple Logging Facade for Java)日志框架的API和实现,以及log4j等日志库,用于日志记录。 这些jar包的...
- `jackson-all-1.9.0.jar`是Jackson库,用于JSON序列化和反序列化,便于与前后端进行数据交换。 - `mysql-connector-java-5.1.17-bin.jar`是MySQL数据库的Java连接器,使得Java程序可以连接并操作MySQL数据库。 ...
在开发中,Fastjson常用于前后端数据交换,提供高效的序列化和反序列化能力。 MySQL是一个广泛应用的关系型数据库管理系统,其jar包包含了与MySQL服务器通信所需的驱动程序。在整合项目中,开发者通常会用到这个jar...
Java提供了多个库,如org.json或Jackson,来处理JSON对象的序列化和反序列化。 **JUnit4** 是Java领域广泛使用的单元测试框架,它极大地简化了测试代码的编写,引入了注解和测试套件等概念,使测试过程更加高效和...
**Jackson2.5.0** 是一个JSON处理库,用于在Java中序列化和反序列化JSON数据。它可以方便地将Java对象转换为JSON格式,或者将JSON字符串解析为Java对象,极大地简化了数据交换的过程。Jackson2.5.0版本包含了多项...
描述中提到的"spring+json+gson+mysql",表明这个平台不仅包含了上述的三大框架,还涉及到了JSON序列化和MySQL数据库。JSON是一种轻量级的数据交换格式,广泛用于前后端交互。Gson是Google提供的一个库,用于在Java...
- **jackson-mapper-asl-1.9.0.jar**:这是Jackson库的一部分,用于JSON序列化和反序列化,Spring3和Struts2可能使用它进行JSON数据的处理。 - **mysql-connector-java-5.1.9.jar**:MySQL数据库的JDBC驱动,用于...
1. **Jackson** 或 **Gson**:Java 库,用于 Java 对象与 JSON 字符串之间的序列化和反序列化。 2. **Ajax**:异步 JavaScript 和 XML 技术,常与 JSON 结合,实现前后端无刷新通信。 3. **RESTful API**:使用 ...
- `struts2-json-plugin.jar`:支持JSON序列化和反序列化。 - `ognl.jar`:Object-Graph Navigation Language,用于表达式语言和数据绑定。 4. **其他库**:除了SSH框架自身的库,还需要一些通用的库来支持它们的...
7. **Jackson 或 Gson**:用于 JSON 数据的序列化和反序列化,例如 `jackson-databind.jar`、`jackson-core.jar` 和 `jackson-annotations.jar`,或者 `gson.jar`。 8. **Dojo 或 jQuery**:如果在前端使用 ...
7. **Jackson或Gson**:用于JSON数据的序列化和反序列化,Spring MVC默认支持这两种库,便于前后端数据交换。 8. **Hibernate或MyBatis**:如果应用需要持久化数据,这些ORM(对象关系映射)框架可以与Spring MVC...
11. **jackson或者gson.jar**:JSON序列化和反序列化的库,Spring MVC通常使用它们将Java对象转换为JSON格式,以便于前后端的数据交换。 12. **validation-api.jar** 和 **hibernate-validator.jar**:用于执行Bean...
在前后端通信中,JSON常被用来传输数据,因为它具有良好的可读性和高效的序列化/反序列化性能。 在“Struts2+Spring+iBatis+jQuery+JSON”这种组合中,通常的开发流程是: 1. 用户通过浏览器发送请求,jQuery负责...