Reputation: 33
I am using javax validations in my controller with @Valid @RequestBody
. When the server receives invalid data it throws error but I want to handle that error and return custom formatted error. I am unable to catch exception in my controller advice. I am using spring webFlux so can't use the bindingResult. How can I handle that exception? Here is my code
Controller
@PostMapping
fun createPerson(@Valid @RequestBody resource: PersonResource): Mono<Person> {
return personService.save(resource.toPerson())
}
Resource
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
}
}
Upvotes: 2
Views: 2087
Reputation: 10852
I think you are catching a different exception. I am using @ControllerAdvice
to catch WebExchangeBindException
as validation errors and it worked for me.
A specialization of ServerWebInputException thrown when after data binding and validation failure. Implements BindingResult (and its super-interface Errors) to allow for direct analysis of binding and validation errors.
Upvotes: 2