【问题标题】:How to handle exceptions in lambda expressions [duplicate]如何处理 lambda 表达式中的异常 [重复]
【发布时间】: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
  • 尝试使用负责处理异常的包装方法

标签: java lambda optional


【解决方案1】:

你确实捕获了异常并返回new ResponseEntity&lt;&gt;(e.getMessage(), HttpStatus.BAD_REQUEST)

然后将其映射到new ResponseEntity&lt;&gt;("Operation successful", HttpStatus.CREATED)

如果您只想在调用成功的情况下拥有new ResponseEntity&lt;&gt;("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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 2012-11-15
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多