一、
- 今天将一个以springboot为基础、maven进行管理的后端程序进行项目部署的时候,不断部分报错:
1 | [http-nio-8080-exec-3] ERROR c.r.f.w.e.GlobalExceptionHandler - [handleException,83] - null |
二、
- 由于项目是前后端分离项目,前端主要使用
vue
来进行管理,后端主要的技术栈是SpringBoot
,前端通过Nginx
来进行部署配置前端的代码,后端主要使用springboot
内嵌的tomcat
服务器来启动项目。然而,排查了很久,在开发阶段的时候程序跑起来没问题,端口和URL都能正常访问,然而前端部署到nginx
和后端打成jar包后,就始终报错。一开始觉得不应该呀,前端请求正常,参数
没错,请求类型
也没错,请求header
也没毛病,确实不是传了一个null
给后端啊。于是将问题的范围缩小到后端。 - 由于开发阶段是没问题的,到了部署阶段就抛这个异常,这个令人纳闷,也由于是部署阶段,排查过程很花时间,最终锁定在异常是在请求的Controller当中的问题,最后打印了一下
Controller
里面用@Autowired
注解标注起来的service
属性,发现为NULL。ok,好吧终于知道为什么报Null异常了,但是为什么呢?包以及指定扫描了,且已经使用注解标注为Controller
组件了,其中里面的service属性也都标注为了Service
组件了,就是不明白。
三、
- 最后不断测试和比较作者以前写的代码,发现,好吧,就是被
@Controller
标注的Controller
层的类里面的方法,都少了个public
修饰符,导致默认为包修饰符。
1 |
|
- 正确的方式应该添加修饰符public:
1 |
|
- 好吧,血淋淋的教训。