net.sf.json的JSONObject对象的put方法的键值对的value值为“null”字符串的坑和错误
项目场景:
一个springmvc老项目的接口返回,使用net.sf.json的json包(一个十年前就停止更新维护的包),使用JSONObject对象的put方法来组装数据的。
问题描述
如果要组装的数据中有类似于value值为“null”字符串的,net.sf.json就会自动转换为它自己定义的JSONNULL对象,这会使springmvc的控制器返回数据时报错,报500,服务器异常错误,准确来说应该是在controller返回数据后,spring框架在解析数据的包的错。
大概的伪代码:
public void run() {
list<JSONObject> list=
JSONObject obj
obj.put("key","null")
list.add(obj)
}
原因分析:
sping对JSONNULL这个类型的数据无法正常转化。
解决方案:
一:网友推荐使用fastjson
二:不使用jsonobject对象形式来组装数据,把所有需要的数据分装到java的类中。因为是一个老项目,其中代码有很多的魔鬼字符串等的问题。最终使用java对象的方式来避免此问题
三:可以自定义spring中objectmap,在JSON序列化的时候,使用自定义方式(这是组内一位大佬提出来的)这种方案可以解决目前框架所有的这种问题。也给我提供了思考问题的一种方式。打开了新世界的大门,深刻认识到了自己和结构师的区别在哪里。还需要好好成长。。。
本文来自博客园,作者:doufei,转载请注明原文链接:https://www.cnblogs.com/lfdou/p/17412930.html