之前小编已经把管理员的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怎么想到看那个报错的。
就这样草草结尾吧。
网硕互联帮助中心



评论前必须登录!
注册