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   }

重启代码 触发

 

 

 

没有问题  异常解决~

posted @ 2021-05-28 15:00  Sigueros  阅读(255)  评论(0)    收藏  举报