java.util.NoSuchElementException: No value present 错误解决

今天在写志愿插入时,要先判断志愿表中是否有该学生的志愿条目,测试时出现java.util.NoSuchElementException: No value present错误

代码如下

        Expectation expectationById = expectationDao.findById(expectation.getStudentId()).get();
        if(expectationById != null){
            log.info("志愿已存在");
            return ResponseResult.FAILED("请勿重复提交志愿!");
        }

报错代码

[2020/06/25-23:04:21] [http-nio-8181-exec-1] [ERROR] [org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet]] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.util.NoSuchElementException: No value present] with root cause
java.util.NoSuchElementException: No value present

查阅资料,算是搞清了这个问题的由来,JPA在调用findById并get时,如果没有查到数据,就会报这个错误。因此不能在get后判断是否为空,要在其之前调用一个.isPresent()方法判断是否有数据。修改后代码如下:

        Optional<Expectation> result = expectationDao.findById(expectation.getStudentId());
        if(result.isPresent()){
            log.info("志愿已存在");
            return ResponseResult.FAILED("请勿重复提交志愿!");
        }

先用一个Optional<实体>去接收返回结果,然后直接调用.isPresent方法来判断是否为空.当然,也可以用一个三元表达式赋值然后再判断

        Optional<Expectation> result = expectationDao.findById(expectation.getStudentId());
        Expectation expectationById = result.isPresent()?result.get():null;
        if(expectationById != null){
            log.info("志愿已存在");
            return ResponseResult.FAILED("请勿重复提交志愿!");
        }

测试,这里选择一个已经存在于表中的条目去插入,返回结果如下

{
  "success": false,
  "code": 40000,
  "message": "请勿重复提交志愿!",
  "data": null
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值