如何处理 lambda 表达式中的异常 [重复]
Posted
技术标签:
【中文标题】如何处理 lambda 表达式中的异常 [重复]【英文标题】:How to handle exceptions in lambda expressions [duplicate] 【发布时间】:2018-01-03 02:06:30 【问题描述】:我有方法 MyService#create 抛出 CustomException。我在 Optional#map 中调用此方法,如下所示:
return Optional.ofNullable(obj)
.map(optObj ->
try
return myService.create(optObj);
catch (CustomException e)
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
)
.map(created -> new ResponseEntity<>("Operation successful", HttpStatus.CREATED))
.orElse(new ResponseEntity<>("Operation failed", HttpStatus.BAD_REQUEST));
当我使用导致异常的参数调用此方法时,会捕获 CustomException,但结果是操作成功且状态为 200。如何在 lambda 中处理此异常并从异常返回消息?
【问题讨论】:
不,lambda 中有抛出异常。我想捕捉并返回正确的结果 使用Optional
的原因是什么?一个简单的if - then - else
就足够了,也许可以搭配try - catch
。
尝试使用负责处理异常的包装方法
【参考方案1】:
你确实捕获了异常并返回new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST)
。
然后将其映射到new ResponseEntity<>("Operation successful", HttpStatus.CREATED)
。
如果您只想在调用成功的情况下拥有new ResponseEntity<>("Operation successful", HttpStatus.CREATED)
,请将您的代码重写为:
return Optional.ofNullable(obj)
.map(optObj ->
try
myService.create(optObj);
return new ResponseEntity<>("Operation successful", HttpStatus.CREATED);
catch (CustomException e)
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
)
.orElse(new ResponseEntity<>("Operation failed", HttpStatus.BAD_REQUEST));
【讨论】:
以上是关于如何处理 lambda 表达式中的异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章