我在@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
}
}
答案 0 :(得分:0)
我认为您正在捕获另一个异常。我正在使用@ControllerAdvice
来捕获WebExchangeBindException
作为验证错误,它对我有用。
数据绑定和验证失败后抛出的ServerWebInputException的特殊化。实现BindingResult(及其超级接口错误),以便直接分析绑定和验证错误。