Optional乱用报错之NoSuchElementException
先看代码:
1 /** 2 * 问卷服务接口 3 * 4 * @author liuxu 5 */ 6 7 public interface ICmsSurveyQuestionnaireService extends IBaseService<CmsSurveyQuestionnaireEntity> { 8 //根据qsn_id 查询所有的数据 9 Optional<CmsSurveyQuestionnaireEntity> getByQsnid(Long id); 10 }
这是我卸载services层的一个getByQsnid方法,为了根据id查询到我想要的问卷表和其关联表的相关数据

然后是controller层的代码 调用service的这个方法 填入id 用.get取值
万万没想到啊~!大意了~就是这个.get()给我整出了后面的事,接着往下看
先上报错:

没有这样的元素异常:不存在的值
好嘛~我也是第一次看到这种异常(就算看到,很非常非常少见),机智的我在确认代码没有明显错误之后,转头就去问了度娘
大体得到的答案就是运用
Optional 的时候如果返回值为null,用.get()方法之后并不会返回null,而是会抛出一个异常
所以就想着在前面加一个判断,ispresent() 当值为TRUE时在.get()
1 //根据id获取整个问卷的信息 2 @Override 3 public ObjectRestResponse<CmsSurveyQuestionnaireDTO> getByQsnid(Long id) { 4 CmsSurveyQuestionnaireEntity cmsSurveyQuestionnaireEntity=new CmsSurveyQuestionnaireEntity(); 5 if(this.cmsSurveyQuestionnaireService.getByQsnid(id).isPresent()){ 6 cmsSurveyQuestionnaireEntity= this.cmsSurveyQuestionnaireService.getByQsnid(id).get(); 7 } 8 9 return this.success(this.map(cmsSurveyQuestionnaireEntity, CmsSurveyQuestionnaireDTO.class)); 10 }
重启代码 触发

没有问题 异常解决~

浙公网安备 33010602011771号