Wie kann ich anpassen von Standard-Fehlermeldung von spring @Gültig Validierung?
DTO:
public class User {
@NotNull
private String name;
@NotNull
private String password;
//..
}
Controller:
@RequestMapping(value = "/user", method = RequestMethod.POST)
public ResponseEntity<String> saveUser(@Valid @RequestBody User user) {
//..
return new ResponseEntity<>(HttpStatus.OK);
}
Standard-json-Fehler:
{"timestamp":1417379464584,"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.MethodArgumentNotValidException","message":"Validation failed for argument at index 0 in method: public org.springframework.http.ResponseEntity<demo.User> demo.UserController.saveUser(demo.User), with 2 error(s): [Field error in object 'user' on field 'name': rejected value [null]; codes [NotNull.user.name,NotNull.name,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.name,name]; arguments []; default message [name]]; default message [may not be null]],"path":"/user"}
Ich würde gerne meine benutzerdefinierte json-für jeden Fehler ist aufgetreten. Wie kann ich erreichen, dass?
InformationsquelleAutor der Frage Disp Hay | 2015-11-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Validierung mit Fehlern/BindingResult Objekt.
Hinzufügen von Fehler-argument, um Ihre controller-Methode und passen Sie die Fehlermeldung, wenn Fehler gefunden.
Unten ist das Beispiel, Fehler.hasErrors() gibt true zurück, wenn die Validierung fehlgeschlagen ist.
InformationsquelleAutor der Antwort kswaughs
Wenn Sie wollen die volle Kontrolle über die response-Nachricht in jeden controller Schreibe einen
ControllerAdvice
. Zum Beispiel, dass Beispiel verwandelnMethodArgumentNotValidException
in eine benutzerdefinierte json-Objekt:InformationsquelleAutor der Antwort Kamill Sokol
Ich weiß, dies ist eine Art der alten Frage,
Aber ich führen Sie einfach hinein, und ich fand einige ziemlich gute Artikeldie hat auch ein perfektes Beispiel in github.
Im Grunde ist es verwendet
@ControllerAdvice
als Spring-Dokumentation schlägt.So zum Beispiel Fang-400-Fehler erreicht werden durch überschreiben einer Funktion:
(ApiError-Klasse ist ein einfaches Objekt zu halten-status, Nachricht, Fehler)
InformationsquelleAutor der Antwort Matan Lachmish
Einen Weg, es zu tun ist das hinzufügen Nachricht in @NotNull annotation.
DTO:
Controller:
InformationsquelleAutor der Antwort Foolish
InformationsquelleAutor der Antwort tongtianxiao