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序列化的时候,使用自定义方式(这是组内一位大佬提出来的)这种方案可以解决目前框架所有的这种问题。也给我提供了思考问题的一种方式。打开了新世界的大门,深刻认识到了自己和结构师的区别在哪里。

还需要好好成长。。。

posted @ 2022-12-01 23:54  doufei  阅读(84)  评论(0编辑  收藏  举报  来源