Spring版本:3.2.7

Jackson版本:

1

2

3 com.fasterxml.jackson.core

4 jackson-databind

5 2.1.3

6

7

8 com.fasterxml.jackson.core

9 jackson-core

10 2.1.3

11

12

13 com.fasterxml.jackson.core

14 jackson-annotations

15 2.1.2

16

POM文件配置

背景:

需要将后端的一个对象,通过SPringMVC框架,传递到前端时,自动转换成对应的JSON格式报文。

堆栈信息:

org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: No serializer found for class

org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable

SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: com.siebre.pms.common.model.ResponseVO["data"]-

>com.siebre.pms.template.model.LiabilityTemplateDO["propertyAssignments"]->org.hibernate.collection.PersistentBag[0]-

>com.siebre.pms.template.model.PropertyAssignmentTemplateDO["propertyTemplate"]->com.siebre.pms.template.model.PropertyTemplateDO_$

$_javassist_187["handler"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class

org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable

SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: com.siebre.pms.common.model.ResponseVO["data"]-

>com.siebre.pms.template.model.LiabilityTemplateDO["propertyAssignments"]->org.hibernate.collection.PersistentBag[0]-

>com.siebre.pms.template.model.PropertyAssignmentTemplateDO["propertyTemplate"]->com.siebre.pms.template.model.PropertyTemplateDO_$

$_javassist_187["handler"])

at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.writeInternal

(MappingJackson2HttpMessageConverter.java:207)

at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:179)

at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

$ServletHandlerMethodInvoker.writeWithMessageConverters(AnnotationMethodHandlerAdapter.java:1037)

at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.handleResponseBody

(AnnotationMethodHandlerAdapter.java:995)

at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.getModelAndView

(AnnotationMethodHandlerAdapter.java:944)

at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod

(AnnotationMethodHandlerAdapter.java:441)

at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)

at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at com.siebre.web.servlet.filter.CorsFilter.doFilter(CorsFilter.java:53)

at com.siebre.web.servlet.filter.CorsFilter.doFilter(CorsFilter.java:34)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at com.siebre.webapp.filter.WindowContextFilter.doFilterInternal(WindowContextFilter.java:274)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)

at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)

at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp

(SecurityContextHolderAwareRequestFilter.java:91)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at com.siebre.security.ui.ClientLoginProcessingFilter.doFilterHttp(ClientLoginProcessingFilter.java:147)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:174)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:277)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)

at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)

at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:230)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at com.siebre.webapp.filter.CacheControlFilter.doFilter(CacheControlFilter.java:34)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at com.siebre.webapp.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:29)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)

at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:845)

at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:688)

at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1315)

at java.lang.Thread.run(Thread.java:595)

错误原因分析:

后端对象中,有部分对象是以懒加载的形式初始化的,在ObjectMapper将对象转为JSON时,这部分对象尚未初始化,报错。

解决方案分析:

这种情况,在Jackson设计的时候,一定会考虑到。

通过堆栈信息,不难发现,这个转换工作,是由框架的 MappingJackson2HttpMessageConverter 这个类完成。

通过堆栈信息,还可以发现,问题主要由ObjectMapper的这个属性:SerializationFeature.FAIL_ON_EMPTY_BEANS,引发的。

由此,我们可以自定义一个 Mapper 继承 ObjectMapper,将以上属性转成我们所需要的即可。

解决方案:

1 public class CustomMapper extendsObjectMapper {2

3 publicCustomMapper() {4 this.setSerializationInclusion(JsonInclude.Include.NON_NULL);5 //设置 SerializationFeature.FAIL_ON_EMPTY_BEANS 为 false

6 this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);7 }8

9 }

CustomMapper

1

2

3

4

5 text/html;charset=UTF-8

6 application/x-www-form-urlencoded;charset=UTF-8

7 application/json;charset=UTF-8

8

9

10

11

12

13

14

15

webmvc-config.xml

Over,问题解决!

json对象转报文_项目记事【SpringMVC-2】:将后台的对象,转成JSON报文相关推荐

  1. 如何修改xd.properties文件中对象存储文件信息_对块存储、文件存储、对象存储的认识总结...

    因工作原因接触了对象存储,从而了解到相关的块存储和文件存储.搜罗了网上各种信息,结合自己的理解,整理如下.欢迎阅读,批评指正. 开头引用下几篇关于"块存储.文件存储.对象存储"的文 ...

  2. word嵌入对象依损坏_出错提示“Word 未能写某些嵌入对象,因为内容或磁盘空间不足”...

    出错提示"Word 未能写某些嵌入对象,因为内容或磁盘空间不足",感开始怀疑是转换软件,经过诊断,一切完好.问题主要出在word上,文档里插入了比较多的公式和图片,而且这些嵌入对象 ...

  3. 3704对象关闭时_错误号:3704 错误描述:对象关闭时,不允许操作

    本文关键详细介绍了错误号:3704 错误描述:对象关掉时,不允许实际操作,必须的盆友能够参照下 "错误号:3704 错误描述:对象关掉时,不允许实际操作.sql=select top 10 ...

  4. jquery 遍历java对象的属性_用jquery each标签遍历java list对象

    最近在做tms管理系统(物流管理软件),遇到这样一个场景: 运单对应多个货物信息(我们这里只对应3个货物信息,但大部分情况下,只有1个货物信息),我需要编辑也就是修改该运单,那么带出该运单一对多的货物 ...

  5. 对象数组参数_【JavaScript 教程】标准库—Array 对象

    作者 | 阮一峰 1.构造函数 Array是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组. var arr = new Array(2);arr.length // ...

  6. 千里眼摄像头支持对象存储吗_“无处安放”的海量数据,万能的对象存储

    原标题:"无处安放"的海量数据,万能的对象存储 作为经常坐地铁通勤的上班族,你在地铁上一般怎样打发时间呢? 据了解,地铁上80%的乘客都会通过手机来消磨时间,其中又有大部分是在看视 ...

  7. 如何知道react对象的值_基于react怎么获取兄弟元素的对象或它的值?

    谢邀. 题主刚学前端的吧,刚用上用react,应该是了解了下DOM然后用起react有这样的疑问.不过没事,慢慢来. 怎么说呢,两个input框在彼此的事件绑定里获取对方的值,在react里是很容易做 ...

  8. js 把字符串转成json对象的三种方法

    js 把字符串转成json对象的三种方法 不管字符串是否含有转义字符,都能转换成 Json 对象 1, js自带的eval函数,其中需要添加小括号eval('('+str+')'); function ...

  9. badatatable转成json_数据表转换成json(DatatableToJson)

    #region 转换Table为JSON数据 /// /// 转换Table为JSON数据 /// /// /// public static string TableToJson(DataTable ...

最新文章

  1. 关于拆分活动页为独立仓库的一点思考
  2. python如何调用参数配置文件_python参数设置
  3. Linux工具快速上手,Linux很实用命令
  4. php在数据流(内存)中操纵远程数据
  5. 网络工程师的人生之路是这样的开始的!
  6. UTM坐标系与GPS坐标系转换笔记
  7. 《jdk8u源码分析》jvm.dll接口列表
  8. 赚大钱的生意都是陌生人生意,熟人生意都是赚小钱
  9. Word手工双面打印
  10. 记录h5文件数据转为npy和csv格式类型的方法
  11. matlab如何离散椭圆方程,给出一些椭圆上离散的点的横纵坐标,怎么用matlab拟合出椭圆方程...
  12. 如何开展一次成功的海外KOL营销活动?
  13. HanLP极致简繁转换详细讲解 1
  14. 伺服电机选型常见的五大方面
  15. 使用循环语句判断月份是31天还是30天?
  16. EMC实验实战案例-ESD静电实验
  17. 【视频教程免费领取】48G全套Java视频教程,从入门到跑路!
  18. python什么时候用函数和类_【Python】一文说清楚类与函数的选择
  19. 安卓便签中的图片怎么一键转发到朋友圈?
  20. Ashampoo AntiSpyWare

热门文章

  1. rar压缩包解开权限密码,忘记rar压缩包密码怎么办?
  2. 数字孪生智慧医院:构建三维医疗管控系统
  3. 【洛谷3110】【USACO14DEC】驮运Piggy Back
  4. android身高控件_RuleView Android 自定义标尺控件(选择身高、体重等) @codeKK Android开源站...
  5. EC预报相关资料整理分享
  6. 【buaa机试题】机场登机口调整
  7. 洁净间的环境监测项目与频次,看看你们的是否也一样?
  8. COLING 2014 Paper Generating Supplementary Travel Guides from Social Media
  9. 旋转rot和翻转flip
  10. 常见条码碳带质量问题有哪些影响?