文章图片
文章图片
【海信|案例分析:记一次springMVC报诡异404的事故】
文章图片
文章图片
引言早上刚到公司 , 测试小伙伴就在群里疯狂@我说:“小米 , 测试环境的订单列表查不到数据了 , 昨天还是正常的 , 今天就突然没有了” , 我说:“别急 , 让我看看先”……
定位问题打开电脑 , 打开浏览器 , 打开网页访问测试环境的订单列表 , 然后按“F12” , 看下network , 点了下功能 , 发现有“/store/storeInfo”接口报“404”错误 , 一般情况下 , 报404错误是因为没有创建该接口 , 但我搜索了代码发现是一个2021年的老接口 , 应该不存在404的问题 。
包名+类名重复想了想 , 测试小伙伴说的话中有一句很关键“昨天正常 , 今天突然没有了” , 我看了下git提交记录 , 发现有一个小伙伴昨天刚提交了“StoreController” , 这个类不在这个微服务中 , 但这个微服务会引用这个类所在的jar包 , 而且很巧的是包名一致 , 都是“com.xxx.store.StoreController” , 我让同事把这个类删掉 , 把新增的方法放到原来的类中 , 重启测试服务 , 搞定 。
源码剖析
springMVC最核心的类是DispatcherServlet , 在这个类的初始化的时候会调用“initHandlerMappings()”方法初始url和controller的映射关系 。
在这里 , 我们发现matchingBeans有以下6个mapping , 因为我们在controller里一般都是以“RequestMapping”做映射 , 所以我们以该类去分析 。
绑定url和controller关系
在这个类中有一个方法“registerHandlerMethod”是绑定url和controller类的关系 , 打断点如下面4个图所示 , 发现只有我们新创建的类而没有原来的类 , 说明storeController被覆盖了 , 至此真相大白 。
建议即使在不同的jar包下 , 包名+类名的组合不要重复 , 以免出现类被覆盖的情况 。
END好兄弟可以点赞并关注我 , 全部都是干货 。
相关经验推荐
- 充电器|首发黑曜屏诠释240Hz“黑”科技 海信U7H电视评测
- 微软|5188元!微软新款笔记本开卖:但性能系统不如MacBook
- 显示器|换个“大件”正当时 显示器细节别忘记
- 华硕无双|5K价位笔记本推荐:华硕无双和小新Pro 16上榜,怎么选一看便知
- 显卡|重新定义我眼中的AMD锐龙笔记本,华硕灵耀X 13首发上手分享
- 海信|充电器不带线卖399块,网友:这很苹果
- 笔记本|iPad端加入天气app引热议
- 小米科技|有没有比小米笔记本性价比更高的笔记本电脑推荐?
- 海信|iOS16:更新点很多,但没有令人“哇塞”的地方!
- 华为|工作中的最佳拍档,华为MateBook系列两款新品笔记本值得入手