Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception报错解决经过
1.报错
过程:在项目测试时删除了某个图片资源后报错:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
[Request processing failed; nested exception is java.lang.NullPointerException] with root cause.
2.分析
常见是属性注入的问题,如
1)Controller类的 @ResponseBody没有加;
2)使用mapper接口或service接口的地方没有加 @Autowired或是没有通过@Bean提交管理对象
3)有的成员变量是主动new出来的,有的则是通过注解提交给SpringBoot管理,当一个new出来的对象类中包含其他注解出来的对象时,也会出错,如:
Service:
public class DemoService { @Autowired private DemoMapper demoMapper; public List findAll(){ List list=DemoMapper.findAll(); System.out.println("demo"); return list; }}
Controller
@RestControllerpublic class HelloController { DemoService demoService=new DemoService(); @RequestMapping("findAll") public List findAll(){ return DemoService.findAll(); }}
new 出来的类是一个使用了注解提交对象的类时会报错;
这些常见的原因,容易解决,只要该加注解的加上注解就可以了。
4)错误经过
但我在项目中出现注解问题之外的报错,查看Lombok日志输出和报错:
输出一直正常,指导最后查询的是结果数为0,即Total:0,后面开始报错,嵌套的异常是空指针异常,肯定是哪边的值为NULL,根据报错找到了对应的类和方法:
逻辑上iExhibitImgMapper.getExhibitImg会返回一个ExhibitImgVO实体类对象,但日志显示返回的ExhibitImgVO数为0,即NULL,会发现一个NULL值去调用实体类的方法getImgurl()就肯定会报错,意思是,exhibitImgVO.getImgurl()时,SpringBoot找不到exhibitImgVO对象,因为它是个Null值,提示是不是没通过注解提交对象。的确问题确实出在这个上面,接着改错。
3.解决
ExhibitImgVO exhibitImgVO =iExhibitImgMapper.getExhibitImg(tableName,id);BeanUtils.copyProperties(exhibitPrefVOList.get(i),exhibitPrefTotalVO);if (exhibitImgVO==null){ exhibitPrefTotalVO.setFirstImgUrl(null);}else { exhibitPrefTotalVO.setFirstImgUrl(exhibitImgVO.getImgurl());}exhibitPrefTotalVOList.add(i,exhibitPrefTotalVO);
我进行了条件判断,如果exhibitImgVO不为NULL时才执行exhibitImgVO.getImgurl(),避免因为对象为Null却调用实体类方法而报错。
每个人遇到的情况都不一定相同,但希望我的改错经历可以对你有所借鉴。
来源地址:https://blog.csdn.net/qq_43780761/article/details/126634925
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341