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

@RestController
public class HelloController {

    DemoService demoService=new DemoService();

    @RequestMapping("findAll")
    public List findAll(){
        return DemoService.findAll();
    }
}

new 出来的类是一个使用了注解提交对象的类时会报错;

这些常见的原因,容易解决,只要该加注解的加上注解就可以了

4)错误经过

但我在项目中出现注解问题之外的报错,查看Lombok日志输出和报错:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception报错解决经过_第1张图片

 输出一直正常,指导最后查询的是结果数为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却调用实体类方法而报错。

每个人遇到的情况都不一定相同,但希望我的改错经历可以对你有所借鉴。

你可能感兴趣的:(Spring,servlet,java,mysql,spring,boot,mybatis)