2 r562253897 r562253897 于 2017.09.18 09:42 提问

java中的校验以及异常处理

1.项目上有个需求,对传入的JSON处理,分解出各类数据,其中业务代码比较复杂并且业务需求目前没有有效的文档说明。
2.传入的JSON如果按照正常需求,业务代码可以满足,如果传入JSON的格式或者数据错误,就会抛出异常,因为之前没有做详细的校验。
3.现在需要在此方法执行过程中,对异常分析处理,找出JSON具体在哪块有错误。

不知广大大神们有什么方案没?

3个回答

SHE_WithWings
SHE_WithWings   2017.09.18 10:01

首先感觉你们用的 json 处理方式应该是手动处理的吧,第三方框架基本上都对于 bean 需要的属性 json 中不存在 或者 json 中提供了 bean 中不存在的 key 进行了兼容 目前来看 除非你对每个 key 每一种情况进行特殊情况处理,否则是无法解决所有隐患的即使这个版本的问题解决 以后版本一旦大修改 一样会爆出这些问题,建议还是切换成三方库来解决 最后 如果你非要这么处理可以给该库做一个接送 数据解析的 log 手动排查,因为不太清楚你们项目这个找出错误到底处在什么方面 在我看来 执行的时候加 log 或者直接断点排查都是可以的啊 如果 第三方解析错误 只能说对象类型错误了, 如果感觉我的建议适合你们的情况,可以继续询问 情况不是特别清楚是无法解决细节性问题的

SHE_WithWings
SHE_WithWings 回复独家de记忆: 这种就是历史遗留了,前面的写代码不加注释,后面的人无法兼容前面没有备注的情况 这个是一些中型公司最常见的问题,你想要找到这些报错的位置其实是不现实的,因为你对数据的处理其实是对解析出来的结果的处理,并不是json 的解析处理,现在有两种方式处理这种问题,1.字符串的格式/拼接放在服务端;2.将所有解析结果的处理放在一个 Utils 里面 不要分散到程序各处 。你的数据解析出来之后已经跟之前的key无关了 你是无法定位到 key 的名字的 不过你可以定位到你现在的变量的名字啊;就像你举例那样 key.substring 那你不就知道 变量名字是 “key”么 找到给它赋值的位置自然就可以定位到你所要找的key
2 个月之前 回复
SHE_WithWings
SHE_WithWings 回复独家de记忆: 你现在的操作明显不是解析的问题了 这种操作是数据解析完成后的处理的问题。
2 个月之前 回复
r562253897
r562253897 比如:JSON格式已经满足了,{key:'123'}但是业务代码在这块进行了key.substring(4,6),这样的操作,也就是说这个key的长度其实必须是大于6位的,此处没有要求提示信息详细到6位,需要能提示到key这个字段名
2 个月之前 回复
r562253897
r562253897 我上面描述的不清晰,目前的业务代码已经迭代过好多版本了,因此在不修改业务代码的情况下,通过最终的异常希望能定位到具体JSON的具体字段。
2 个月之前 回复
qq_33495943
qq_33495943   2017.09.18 10:05

采用Gson解析,报错都有提示的。ok

zy841958835
zy841958835   Ds   Rxr 2017.09.18 10:26

org.json.jar 这个包里面的JSONObject 可以私信我

Csdn user default icon
上传中...
上传图片
插入图片