解决net.sf.json包json化后,对象系列化时net.sf.json.JSONNull[“empty”]错误
一、问题描述
前端(使用angularjs的架构)调用后台接口后显示404,看后台日志接口已经请求成功了。所以有两点就很奇怪了:
问题一:请求了接口会什么会报404?为什么会没有错误日志
问题二:这个具体的错误到底是什么?
带着这样的疑问,我们来开启我们的定位调试之旅吧~
二、问题一解决问题
先说明下我使用的系统架构:前端使用angularjs 后端使用springmvc模式
1)找到报错点
我们系统使用的是前后端分离的架构,所以服务是划分为web(前端页面相关)、service(具体业务逻辑)两个模块的。看日志是发现接口是正常请求完成的。我的复现方式是本地其服务来调试的。
2)调试错误链
**错误原因:定义的实体类若未赋值(即为null),json时被转化为“null”.JSONNUll对象接口返回后,springmvc系列化会抛出异常:ModelAndView: reference to view with name ‘error’; model is {exception=org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Object is null (through reference chain: java.util.HashMap[“result”]->java.util.HashMap[“data”]->java.util.HashMap[“test”]->java.util.HashMap[“testBO”]->net.sf.json.JSONNull[“empty”]); **
1.接口请求现象:
2.接口使用net.json执行json化的代码
3.数据被json化后的结果,可以看到bean对象为null时会被转化为JSONNull对象,体现形式为"null"
4. 在请求完成后,springmvc框架后续执行调用链
5. “null”在经过BeanSerializer系列化器时会抛出“Object is null”
6. 报错代码