使用spring开发遇到 ... nested exception is java.lang.NullPointerException] with root

381 阅读2分钟

本文已参与“新人创作礼”活动,一起开启掘金创作之路。​​ ​

 今天使用spring框架开发一个项目时遇到了一点小问题,同样的一个功能,取出数据库中查询到的总条数,但是在两个BizImpl中代码相似,一个通过但是另一个却报错。严重: Servlet.service() for servlet [DispatcherServlet] in context with path [/wcx] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause。一开始还有点懵,以为在XML中有代码写错什么的,看到NullPointerException就是没有对变量进行null判断。其中两个不同的BizImpl类中局部代码如下:

TemplateBizImpl类中:(功能正常实现)

@Service
@SuppressWarnings({"rawtypes","unchecked"})
//上面的rawtypes为了消除警告(删除后BaseDao会出现警告), unchecked为了消除警告(baseDao.findAll(Template.class, map, "findByPage"  会出现警告);)。
public class TemplateBizImpl implements ITemplateBiz{
	@Autowired
	private BaseDao baseDao; 	//使用一个泛型的实体类,可以字节用它来当作数据层的类
	
	@Override
	public Map<String,Object> findByPage(Integer pageNo, Integer pageSize) {
		Map<String,Object> map = new HashMap<String,Object>();
		Map<String,Object> map1 = new HashMap<String,Object>();
		
		map.put("pageNo", pageNo);
		map.put("pageSize", pageSize);
		map1.put("total", this.baseDao.findFunc(Template.class, "temTotal").intValue());
		map1.put("rows", this.baseDao.findAll(Template.class, map, "temfindByPage"));
		return map1;
	}

SurveyBizImpl类中:(功能不能实现,报出异常)

@Service
@SuppressWarnings({"rawtypes","unchecked"})
public class SurveyBizImpl implements ISurveyBiz{
	private BaseDao baseDao;
	
	@Override
	public Map<String,Object> findByPage(Integer pageNo, Integer pageSize) {
		Map<String,Object> map = new HashMap<String,Object>();
		Map<String,Object> map1 = new HashMap<String,Object>();
		
		map.put("pageNo", pageNo);
		map.put("pageSize", pageSize);
		System.out.println(map);
		map1.put("total", this.baseDao.findFunc(Survey.class, "surTotal").intValue());
		System.out.println(map1);
		map1.put("rows", this.baseDao.findAll(Survey.class, map, "findByPageSurvey"));
		System.out.println(map1);
		return map1;
	}

这两个代码几乎都一样,一开始我一直局限在这个findByPage函数内部,报错的   map1.put("total", this.baseDao.findFunc(Survey.class, "surTotal").intValue());    没有对变量进行null判断。我们一个个对象来看。map1,就在上面定义好了,Survey这个类也导入了,最后看到一直没有关注的baseDao,仔细看也没打错,然后看了一下上面定义的。就会发现  private BaseDao baseDao;  定义的语句中上面少了  @Autowired  这个配置。因为我们使用了spring,所以相当于这个类我们给这个容器托管,不能自己随便定义。就好像学校的图书馆,我们可以去借一本书,但是不能去买一本一样的回来。所以加上 @Autowired  问题就解决了。

        @Autowired
	private BaseDao baseDao;

这个问题的解决办法就是在报错的那一行看每一个变量的定义的位置,看看是否存在未定义的情况,spring框架中对于对象要使用 @Autowired 配置对象。