如何从Spring Webflux控制器捕获异常?

时间:2018-07-01 20:44:22

标签: spring kotlin spring-webflux

我在@Valid @RequestBody的控制器中使用javax验证。当服务器收到无效数据时,它将引发错误,但我想处理该错误并返回自定义格式的错误。我无法在控制器建议中发现异常。我正在使用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,
    ...
}

ErrorHandler

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

1 个答案:

答案 0 :(得分:0)

我认为您正在捕获另一个异常。我正在使用@ControllerAdvice来捕获WebExchangeBindException作为验证错误,它对我有用。

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

相关问题