Wenn Sie in Spring 4.x @RestControllerAdvise
(oder @ControllerAdvice
) verwenden, das ResponseEntityExceptionHandler
erweitert, wird die standardmäßige Ausnahmebehandlung mit netten und informativen JSON-Antworthauptteilen nicht mehr standardmäßig für Argumente zurückgegeben, die als markiert sind @Valid
.
Wie erhalten Sie die Standard-JSON-Körper, die zurückgegeben werden, während Sie ResponseEntityExceptionHandler
based @RestControllerAdvice
verwenden?
Das folgende ist ein einfaches, aber vollständiges Beispiel, das diese Frage beschreibt. Verwenden Sie diese Klassen:
%Vor% Wenn Sie eine POST
an /cars
mit
Er antwortet mit einem 400
und dem folgenden Text:
Wenn Sie jedoch die Ausnahmebehandlungsmethode in eine eigene Klasse mit der Bezeichnung @RestControllerAdvice
verschieben, die sich von ResponseEntityExceptionHandler
wie folgt erstreckt:
Sie erhalten 400
mit einem leeren body , was dadurch verursacht wird, dass ResponseEntityExceptionHandler
eine Methode liefert ( handleMethodArgumentNotValid(..)
), die eine Antwort aufbaut, in der der Körper null
ist .
Wie würden Sie diese @RestControllerAdvice
-Klasse ändern, um die ursprüngliche Behandlung auszulösen, die auftritt, die einen JSON-Text liefert, der beschreibt, warum die übermittelte Anfrage ungültig ist?
Ein Ansatz ist, dass es für mich funktioniert, ResponseEntityExceptionHandler
So würde die Ergebnisklasse aussehen:
%Vor%Siehe aber auch: Ambiguous @ExceptionHandler-Methode zugeordnet für [class org.springframework.web.bind.MethodArgumentNotValidException]
Tags und Links java spring spring-mvc spring-boot