当前位置: 首页 > 知识库问答 >
问题:

如何处理lambda表达式中的异常[重复]

汪志业
2023-03-14

我有metohod myservice#create,它抛出CustomException。我在可选#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中处理此异常并返回异常消息?

共有1个答案

姬英耀
2023-03-14

您确实捕获了异常并返回新的ResponseEntity<>(E.getMessage(),HttpStatus.BAD_Request)

然后将其映射到new responseEntity<>(“operation successful”,HttpStatus.created)

如果您希望只有在调用成功的情况下才有新的ResponseEntity<>(“操作成功”,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表达有意见。我的代码: 有可能吗?我只能使用java.util.function。我尝试从“lambda”中删除try catch,而我“main”方法应该正在捕获异常。

  • 如何在Lambda中处理和重新抛出异常?当我试图用try/catch块包围调用时,它只是在lambda表达式中捕获它。我在方法签名中有ServiceException,所以我只想重新抛出它。是可能还是我漏掉了什么?

  • 我正在使用Java8中引入的Stream API,为列表中的每个字符串运行一个方法。 如您所见,方法签名状态为抛出所有IOExceptions,流中的writeToString方法可能抛出IOException。但是,Java编译器给了我一个错误,指出流线上有一个未处理的IOException。 为什么流中的异常不会像方法中的其他异常一样被抛出?有没有什么方法可以在不在forEach lambda

  • 问题内容: 我如何写一个等于的lambda表达式: 不允许以下内容: 问题答案: 皮肤化Python的方法不止一种: Lambda接受语句。既然是一条语句,您可以编写一个通用的提升器: 但是,如果您的目标是避免使用,则显然不能削减它。但是,它确实允许您有条件地引发异常,例如: 另外,您可以在不定义命名函数的情况下引发异常。您所需要的只是强健的腹部(给定的代码是2.x): 和python3 强健胃部

  • 我有以下代码段。 由于以下错误,此操作无法编译。 未处理的异常类型AddressException 我研究了一些,所有的解决方案都只是将检查的异常包装在自定义方法中的运行时异常中。我想避免为那些东西编写额外的代码。这类案件有没有规范的处理方式? 到目前为止我所做的是 但看起来不太好。我可以发誓,在其中一个教程中,我看到了或类似内容的标准内容。

  • 我有一些代码抛出一个检查异常。我想在lambda中调用该代码,以便从另一个映射创建一个映射: 其中是引发异常的代码: 现在编译器肯定会抱怨没有处理异常。所以我用一个来包围它,看起来很难看: 因为我们需要返回-case中的内容。然而,在这种例外情况下,返回任何内容都没有多大意义,这就是为什么我实际上不想在该级别处理异常。难道我不能在我创建lambda的调用代码中处理异常吗?所以说只是上面一层? 但这