问题一:项目运行不了问题
打开项目后,点击运行显示报错,代码没有问题但始终运行不了程序。
原因:
没添加环境。
解决方法:
使用 SwitchHosts 工具添加代码运行的配置环境。并且在代码环境中加载刚刚在 SwitchHosts 工具中配置好的环境。
问题二:未登录问题
在 postman 中请求 url,返回的参数提示未登录。
{ "successful": false, "code": "401", "message": "用户未登录,请重新登录!\n uri:…………", "data": null }
原因:
因为后端对 url 地址做了登录校验,如果没有相应的登录参数,就会报错:未登录,自动跳转到登陆页面。
解决:
- 添加 token
token:…………
-
添加 Id
Id:1
-
添加相关登录参数
…………
问题三:测试类问题
创建测试类运行不起来,检查过代码逻辑没有问题。
原因:
- 没加 @SprootBootTest 注解
- 缩短命令行方式错误
解决方法:
- 缩短命令行方式:改为 JAR 清单
- 添加注解
@SpringBootTest(classes = Application.calss,properties = {"spring.profiles.active = dev1"})
JAR 清单和 @argfile 都是用于缩短命令行的方式,但它们的作用和使用方式略有不同。
JAR 清单是一种在 JAR 文件中指定 Main-Class 和 Class-Path 的机制。通过在 JAR 清单文件中指定 Main-Class,我们可以使用”java -jar” 命令来启动应用程序,而无需指定主类名。此外,JAR 清单文件还可以指定 Class-Path,用于指定 JAR 文件的依赖关系。使用 JAR 清单文件可以使命令行更简洁,但需要在打包 JAR 文件时进行配置。
@argfile 则是一种通过文件来指定命令行参数的机制。我们可以将命令行参数保存到一个文件中,然后使用”@argfile” 选项来指定该文件,从而将所有参数传递给应用程序。使用 @argfile 可以避免命令行过长的问题,同时也可以方便地管理命令行参数。需要注意的是,@argfile 选项只能用于”java” 命令,而不能用于其他命令。
问题四:feign 测试问题
1. 添加……-sdk 依赖时,报错缺了很多其他依赖
原因:
猜测是 sdk 文件包太大了,新建的服务模块缺少了很多依赖包。
解决办法:
新建一个 openfeign 模块和 controller 模块,把自己写的 feign 抽取出来放到 opfeign 模块,避开 skd 依赖包,尽量少引依赖包。
2. 调用 feign 接口时,出现错误:
feign.FeignException$ServiceUnavailable: [503] during [GET] to [http:……] [GetNameFeign#getNameById(Long)]: [Load balancer does not contain an instance for the service ……-service]
原因:
路径中
http://……,……-service 不正确,找不到对应的服务
解决办法:
在 Feign 接口中加入 url 参数
@FeignClient(value = "……-service",url = "localhost:8080")public interface GetNameFeign { …………}
3. 前端校验问题:
openfeign 接口正确,可以通过原地址访问 (80 端口),但不能通过调用 openfeign 接口访问 (8080)。通过调用 feign 接口访问的地址 (8080) 访问的时候,token 中的参数传不过来原服务 (80 端口)。
原因:
后端做了登录校验,接口路径 (8080) 被拦截器拦截了。
解决办法:
在拦截器中加入路径放行:
registry.addInterceptor(new UserInterceptor()).addPathPatterns("/**") .excludePathPatterns( ………… "/info-by-id/*" );