请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在9-5章controller取消订单中,为了测试错误页面,需要传入一个错误的orderId,先使用orderService查询,然后捕捉异常,

但是我的spring boot版本是2.0的,所以orderRepository需要在findById()后面加上get()方法,此时这段代码是这样OrderMaster orderMaster = orderMasterRepository.findById(orderId).get();
所以在传入错误的orderId()后,并不会进入if(orderMaster==null){throw new SellException(ResultEnum.ORDER_NOT_EXIST);
}
即没有抛出SellException,所以controller不会捕获这个异常。而是在get()方法这里出错。https://img1.sycdn.imooc.com//szimg/5ad1f7b4000185c618790968.jpg

https://img1.sycdn.imooc.com//szimg/5ad1f83e0001262217410702.jpg

正在回答 回答被采纳积分+3

3回答

廖师兄 2018-04-16 00:12:56

findById返回是optional对象,不能直接在后面加get。保持版本一致,先把课程学完。

3 回复 有任何疑惑可以回复我~
  • 提问者 悟空不悟空 #1
    老师,解决了。对findById()做isPresent()判断,然后决定抛出异常或者.get()。
    if (!orderMasterRepository.findById(orderId).isPresent())
    		{
    			throw new SellException(ResultEnum.ORDER_NOT_EXIST);
    		}
    		OrderMaster orderMaster = orderMasterRepository.findById(orderId).get();
    回复 有任何疑惑可以回复我~ 2018-04-16 11:53:12
  • jxnu3516 回复 提问者 悟空不悟空 #2
    给力,谢谢
    回复 有任何疑惑可以回复我~ 2018-11-08 20:44:08
  • 没时间解释 回复 提问者 悟空不悟空 #3
    可以的,
    回复 有任何疑惑可以回复我~ 2019-01-16 15:49:56
杨勤_cd 2018-12-25 08:08:17

findById(id).orelse(null)即可进入错误分支

0 回复 有任何疑惑可以回复我~
addictedleo 2018-12-22 09:17:26

我用的2.1.1也遇到同样的问题了,不过我把

OrderMaster orderMaster=orderMasterRepository.findById(orderId);

改成下面这样就OK了:

Optional<OrderMaster> orderMaster=orderMasterRepository.findById(orderId);


0 回复 有任何疑惑可以回复我~
  • 提问者 悟空不悟空 #1
    还是要判断ordermaster.ispresent(),跟上面是一样的
    回复 有任何疑惑可以回复我~ 2018-12-22 09:50:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信