Suchen Sie nach Hilfe für die Überprüfung der Spring-Datenruhe in Bezug auf die ordnungsgemäße Behandlung von Validierungsfehlern:
Ich bin so mit den Dokumenten bezüglich der Validierung der Federdatenruhe verwirrt: Ссылка
Ich versuche, die Validierung für einen POST-Aufruf richtig zu behandeln, der versucht, eine neue Unternehmenseinheit zu speichern
Ich habe diese Entität:
%Vor%...
und diese RestResource dao
%Vor%POST-Anfrage an api / Firmen:
%Vor%Wenn ich einen POST mit einem Nullnamen ausstelle, erhalte ich die folgende Ruheantwort mit httpcode 500
{"timestamp": 1455131008472, "status": 500, "error": "Interner Serverfehler", "Ausnahme": "javax.validation.ConstraintViolationException", "message": "Validierung fehlgeschlagen für Klassen [com. domain.Company] während der persistenten Zeit für Gruppen [javax.validation.groups.Default,] \ nListe der Constraint-Verletzungen: [\ n \ tConstraintViolationImpl {interpolatedMessage = 'darf nicht null sein', propertyPath = name, rootBeanClass = class com.domain .Company, messageTemplate = '{javax.validation.constraints.NotNull.message}'} \ n] "," Pfad ":" / api / companies / "}
Ich habe versucht, die folgende Bean zu erstellen, aber es scheint nie etwas zu tun:
%Vor%Und selbst wenn es funktioniert, wie würde es mir helfen, eine bessere Fehlerreaktion mit einem richtigen http-Code und einer verständlichen json-Antwort zu entwickeln?
so verwirrt
mit 1.3.2.RELEASE
%Vor%@Mathias Es scheint, dass das Folgende genug ist, damit jsr 303-Annotationen überprüft werden können und dass es automatisch einen http-Code von 400 mit netten Nachrichten zurückgibt (ich brauche nicht einmal die Klassen BeforeCreateCompanyValidator oder BeforeSaveCompanyValidator):
%Vor%}
response 404, {"errors": [{"entity": "Firma", "message": "darf nicht null sein", "invalidValue": "null", "property": "name"}, { "entity": "Firma", "Nachricht": "darf nicht null sein", "invalidValue": "null", "Eigenschaft": "Adresse"}]}
Ich denke, Ihr Problem ist, dass die Bean-Validierung zu spät erfolgt - es wird auf der JPA-Ebene durchgeführt, bevor es persistiert. Ich habe festgestellt, dass - anders als Spring mvc - spring-data-rest keine Bean-Validierung durchführt, wenn eine Controller-Methode aufgerufen wird. Sie benötigen dafür eine zusätzliche Konfiguration.
Sie möchten, dass spring-data-rest Ihre Bean validiert - das gibt Ihnen nette Fehlermeldungen und einen korrekten HTTP-Return-Code.
Ich habe meine Validierung im Frühling-Daten-Rest wie folgt konfiguriert:
%Vor%Wenn die Bean-Validierung und / oder mein benutzerdefinierter Validator Fehler findet, erhalte ich eine 400 - ungültige Anfrage mit einer solchen Nutzlast:
%Vor% Die Antworten von @Mathias und @ 1977 reichen für normale Spring Data REST
-Aufrufe aus. In Fällen, in denen Sie benutzerdefinierte @RepositoryRestController
s schreiben müssen, verwenden Sie @RequestBody
und @Valid
JSR-303 Anmerkungen funktionierte nicht für mich.
Also, als Ergänzung zu der Antwort, habe ich im Fall von benutzerdefiniertem% co_de% s mit @RepositoryRestController
und @RequestBody
Annotation das folgende @Valid
hinzugefügt:
Tags und Links spring-boot spring-data-rest spring-rest