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

如何从spring webflux控制器捕获异常?

卢出野
2023-03-14

我在我的控制器中使用javax验证,带有@Valid@Request estbody。当服务器接收到无效数据时,它会抛出错误,但我想处理该错误并返回自定义格式的错误。我无法在控制器建议中捕获异常。我使用的是Spring webFlux,因此无法使用bindingResult。我如何处理该异常?这是我的代码

控制器

    @PostMapping
    fun createPerson(@Valid @RequestBody resource: PersonResource): Mono<Person> {
        return personService.save(resource.toPerson())
    }

资源

data class PersonResource(
    val id: String?,

    @field:NotEmpty
    val name: String,
    ...
}

错误处理程序

@ControllerAdvice
class ApiErrorHandler {
  @ExceptionHandler(IllegalArgumentException::class)
    fun handleValidationErrors(e: IllegalArgumentException): ResponseEntity<*> {
    // never reaches here
  }
}

共有1个答案

刘星火
2023-03-14

我认为您正在捕获一个不同的异常。我正在使用@Controlller建议来捕获WebExChangeBindExctive作为验证错误,它对我有效。

数据绑定和验证失败后引发的ServerWebInputException专门化。实现BindingResult(及其超级接口错误),以便直接分析绑定和验证错误。

 类似资料:
  • 本文向大家介绍如何捕获 setTimeout 异常相关面试题,主要包含被问及如何捕获 setTimeout 异常时的应答技巧和注意事项,需要的朋友参考一下 No description provided.

  • 问题内容: 我正在尝试从Python内部进行比特币付款。在bash中,我通常会这样做: 因此,例如: 如果成功,我会得到一个交易ID作为输出,但是如果我尝试转账大于我的比特币余额的金额,则会得到以下输出: 现在,在我的Python程序中,我尝试按以下方式进行付款: 如果有足够的余额,则可以正常工作,但是如果没有足够的余额,则会输出以下内容: 它不包括我在命令行中得到的错误。所以我的问题是;如何从P

  • 问题内容: 一切都很棒,直到遇到真正需要捕捉例外的地方。当我放置 在 阻止我得到: 在这种情况下我该怎么办? 谢谢, 问题答案: 这是因为,任何一种方法(javadoc链接)都不会引发检查异常。Spring将其转换为DataAccessException之一,它是更通用的运行时异常家族,以抽象出任何特定的基础数据库实现。

  • 我正在寻找一种方法来处理与前端的通信,以防响应状态(ResponseStatus)导致的错误,从而 如果回复是400/401/403,我可以记录信息并发送特定消息 如果响应为500,我可以记录错误并发送另一条特定消息 等等 在我们的Api网关中,我们有一个(),我们在其中处理异常并将自己的DTO返回给前端。 如果我以单个异常为目标(参见下面的示例),那么一切都可以正常工作,但如果我只想以响应HTT

  • 所以我有一个Laravel控制器: 目前,我正在使用artisan(在引擎盖下运行PHP的内置开发Web服务器)运行应用程序: 我想将控制台消息记录到artisan进程的管道中。

  • 问题内容: 发现在Java 1.6(以及从Eclipse)上运行时,吞没了该方法中的异常之后,我试图找到一种捕获这些异常的方法,而不会在我的所有实现中都添加throw / catch 。 该API建议覆盖应对此有所帮助: 导致此future报告一个ExecutionException,并以给定throwable作为其原因,除非已经设置或取消了此Future。计算失败时,run方法在内部调用此方法。