踩坑日记:行之Blog微信小程序开发过程中碰到的问题及处理方案(持续更新...)
此开源项目是笔者的第一个自己动手写的后端项目......之前一直都是只看书和视频去不停学理论却很少去动手,最近感觉自己还是缺少项目的磨练,于是在每天安排固定的学习时间之余,开始动手自己实现一些项目。在开始做项目后,发现了自己很多的问题,也踩了一些坑,于是把这些记录下来,当作第一个项目的纪念吧.....项目地址放在下面(内有项目介绍),因为是第一个项目,所以求轻喷.....
github地址
gitee地址
问题:*.YML文件没有spring小叶子图标
就是像下图这样....
- 首先,进入setting下的这里,如图:
-
如果发现图中第四个蓝圈的区域没有*.yml的话就点击右边+号把它加上去,再点击 Apply就可以了。
-
但是...我还真是个倒霉蛋..我发现我原本就有这个*.yml的,但是我.yml文件就是没有spring小叶子图标啊,然后我气急败坏地把它删掉了(咋删的:选中,点击右边的-号),然后又尝试性地加了回来,点击了下apply,结果....,yml文件就有spring小叶子图标了...真是柳暗花明啊..
- 总结:最后...引用一句“名言”:“重启解决90%的问题“。
问题:@Mapper报红
在已经在maven中导入相关依赖后,@Mapper报错。看了右边maven依赖,发现有导入相关依赖啊,咋回事啊...
不懂就问...于是去百度了下,百度时用的是关键词“@Mapper报红”,搜索出来的都是mybatis版本的问题,要换版本,但是我用的版本很高了啊....尽管如此,我依旧试了下,发现....没用。
看了半天,发现右边maven中的相关模块是灰色的...这咋回事
百度了下,很快嗷,结果出来了,说是maven中的设置把我这个模块给忽略了.....当时我就流眼泪了,这咋忽略了呢...于是我马上去maven的设置中看,果然,如下图,maven把这个模块给我忽略了...
于是我马上把它取消掉,果然,@Mapper不报红了........感谢搜索引擎,感谢踩过坑的前辈.....
Invalid bound statement (not found) 问题
需要提前说明的是,此项目是一个多模块项目,以下问题主要是多模块下的场景。
跟据我所遇到的情况来说,这种问题的发生原因有两种:
- 一种发生在service
- 一种发生在dao
问题在service层出现时的解决方法
啥意思呢?首先,我们先来看第一种的错误信息,如图:
可以看到,说的是在service下的test方法(这个方法是自己写的,其中调用了dao的方法)出现了问题,根据字面意思就是无效的绑定说明。
此时需要检查启动类的MapperScan注解,此时我的注解如下图
而我的包结构如下:
这样一来,MapperScan就会扫描com.xingzhi下的service接口了,但在service接口中没找到映射的mapper,所以报错了。我们需要把扫描的路径改为如下(把路径限定在只有mapper接口的包下面):
这样,就解决问题了。
问题在dao层出现时的解决方法
这种问题其实在多模块项目里比上一个问题好解决,但是也是一个容易忽略的问题,错误打印如下:
可以看出,问题发生在dao层(这里我的dao用mapper来命名了),这种问题一般是dao的接口类和mapper没有对上,可能会有以下几种原因:
- mapper.xml中的一些对应信息如(namespace、id)没对上
- mybatis中的mapper-locations没有定位到正确的mapper的位置
第一情况解决方法很简单,检查...改正
主要是第二种情况,第二种情况情景还原如下:
没修改前我的mapper-locations如下:
因为我的是多模块项目,且我的mapper是在其他模块的。在这种情况下,mybatis扫描不到其他模块的mapper,这时我们把其改为下图所示就能解决问题了。
小小总结以下:遇到这两个问题我查了很多资料,方得以解决。我还是太菜了啊....基础不过关啊......还要努力..
spring cloud gateway 500报错
详细报错内容:
就是类型转换的问题
首先,我们先排查下gateway模块下有没有这个
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
或者依赖其他的模块中有没有,有的话就用exclusions把它去掉
如果还没解决问题的话就看看有没有用到servlet的包,因为访问页面时候是通过servlet进行远程调用获取结果集的,而访问网关是用webflux直接接收的,所以当gateway网关微服务引入servelt时候,就会使用servlet接收,但是响应却是webflux,最后会出现类型转换异常的错误。
解决方案:
- 去掉 spring-boot-starter-web 依赖
- 去掉有 servlet 的依赖