@ManyToMany及@Responsebody注意事项

     最近在学习spring MVC,这是背景,spring MVC中我最喜欢的是他在返回JSON的时候直接在该方法上添加一个@Responsebody的注解就行了,然后返回的时候便直接是JSON格式,还不用自己去转换,颇为方便。而在与hibernate搭配的时候则郁闷了,hibernate中可以配置ManyToMany,而且还会自动将关联的字段取出来,比如Role和Resource这两个类,定义的时候两者关联,在获取Role的时候会获取Resource,而获取Resource的时候又去获取Role,于是便死循环了。

    当然hibernate中有Lazy加载模式,正常使用时没问题的,可是在转换JSON的时候便开始需要使用了,于是,重复加载成了必然。所以一旦两个类的关系建立了起来,查询的时候便直接死循环了。具体表现是报如下错误

WARNING: Handling of [org.springframework.http.converter.HttpMessageNotWritableException] resulted in Exception
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed

     HTTP消息无法写入错误,从这点可以看出他的问题出现环节是在消息转换的方面(实际寻找起来可没这么顺利),于是调试跟踪,发现问题出在转换JSON的环节,稍一分析还是前文说到的死循环的问题,于是找到里面用到的Jackson的jar包,发现里面有个com.fasterxml.jackson.annotation的包,于是打开一看里面好多class,找到一个JsonIgnore的class文件,从字面上理解估计是我要的,于是开始尝试,果断解决。。

     解决方式:在Role中的resources字段上加上注释:@JsonIgnore,完全OK有木有啊。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值