云计算百科
云计算领域专业知识百科平台

【电商项目】新手角色管理代码测试报错排查与解决方案

之前小编已经把管理员的CRDU逐个完成并认真看了报错总结了自己踩的坑。角色管理这里也是实现CRDU,我自己尝试独立完成,实现过程比较顺利,就是有几处总是忘写注解,这个等后期要总结一篇新博文发,这篇主要记录一下编写和测试的时候遇到的报错。

一、xml 文件 property 参数爆红

当时有点一头雾水,让通义检查了一下,发现是 resultMap 指定的 type 路径写错了,应该是实体类common的路径,修改了就好了。

二、 修改测试报错 (BadSqlGrammarException)

这是测试的时候报的错,事情的经过是这样的。

在小编执行新增角色的时候,发现状态码200没错,但是查询数据库发现,只自增了id,id对应的行里是null。我当时想不到是因为什么,毕竟孩子刚接触落地项目(最后找到了原因)。等到后面测试修改角色的时候,报500了。

好消息——有报错可以看可以找原因了。

坏消息——四百多行信息,六七个 Caused by ,本来现在查报错能力就弱。

不过没关系的,我们做的就是解决问题的工程师!

于是我去认真翻译报错,这里给大家分三层了解一下报错信息,然后我们再说是什么问题。

最顶层:RPC 调用失败

org.apache.dubbo.rpc.RpcException: Failed to invoke the method update
in the service com.moriha.common.service.RoleService.

翻译:调用 RoleService.update 方法时失败了。这一行只告诉我谁出了问题

中间层:序列化异常——这是干扰信息

中间 300 多行全是 FilterChainBuilder、AbstractClusterInvoker、FailoverClusterInvoker 这些 Dubbo 框架的调用链。这是 Dubbo在重试调用和序列化结果,不是我们的代码,99% 的情况可以跳过。

最后层:真正的罪魁祸首

滚动到最后面,找到最内层的 Caused by:

Caused by: com.alibaba.fastjson2.JSONException: auotype not support :
org.springframework.jdbc.BadSqlGrammarException

再往下一层:

Caused by: org.springframework.jdbc.BadSqlGrammarException

这才是真正的根因——BadSqlGrammarException,SQL 语法错误。

提取到核心信息是SQL语法错误。不过我检查了我写的没毛病,实在查不出原因了,我请求了Claude,它让我把管理员启动类的日志报给它,小编这时候才学会原来看这个日志也是筛查原因的重要一步,之前我对看日志还停留在log.info输出的内容。

以下是日志的核心解读,看图更方便,小编就不文字描述了

结论:传到提供者端的 Role 对象是个"空壳",所有字段都是 null。

也就是说,我的测试数据并没有通过控制器的方法传入,于是我去查看我的控制器方法,发现我传入的参数前面没有加 @RequestBody 注解,没有这个注解就接收不到 POST / PUT 请求体里的JSON 数据,自动把 JSON 转为 Java 实体对象,不能接收 URL 拼接参数。

所以,这也是为什么新增角色操作数据库只自增id不录入数据的原因

至此破案,加完注解两个全好了。

这个问题我花了一个半小时才找到,不过感觉自己看报错的能力确实上升了,爽之爽之。

收获颇丰的,之后大概率会写一篇看报错和日志的文章,我还问了Claude怎么想到看那个报错的。

就这样草草结尾吧。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【电商项目】新手角色管理代码测试报错排查与解决方案
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!