Kyser Soze
Kyser Soze

Reputation: 33

How to catch exceptions from spring webflux controller?

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

Answers (1)

choasia
choasia

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

Related Questions