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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构