J'ai une méthode d'action définie comme celle-ci dans l'un de mes contrôleurs:
@RequestMapping(method = RequestMethod.POST)
public @ResponseBody Post create(@Valid Post post, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
// how to return an error status + error messages from here?
} else {
postRepository.persist(post);
return post;
}
}
3 Réponses :
Je pense que vous voulez faire un appel Ajax dans votre contrôleur. Vous retournez un objet post dans la méthode, il est donc impossible de renvoyer un autre objet (tel que le message d'erreur avec le code). Que diriez-vous de renvoyer une exécutionRésult à la place?
ExecutionResult{
private int statusCode;
private String message;
private Object yourPost;
//get and set methods here...
}
Sine vous desigining un api REST, vous devez créer votre propre Pojo (aka. Ressources) qui représentera les erreurs de comportement étrange ou de validation, comme indiqué par horaceman. Je vais vous montrer comment nous le faisons dans notre application.
Puisque nous utilisons JSON en tant que représentation des données, nous souhaitons recevoir des informations suivantes si une exception inattendue se produit. P>
{ "status" : "VALIDATION_FAILED", "errors" : [ "fieldName" : "username", "errorCode" : "validation.requiredField", "errorMsg" : "Username is required."] }
Pour @Responsebody, je supprimerais Binigresult de la signature de la méthode et laisseriez la juvèle à la suite. J'utiliserais alors une méthode @ExceptionHandler pour renvoyer un objet contenant les erreurs telles que Likacz décrites.
@RequestMapping(method = RequestMethod.POST)
public @ResponseBody Post create(@Valid Post post) {
postRepository.persist(post);
return post;
}
@ExceptionHandler
public ValidationErrors handleException(BindException ex) {
// ...
}
Veuillez noter que si vous souhaitez revenir validationErrors code> dans le corps de réponse, la méthode ManiptionException code> nécessitera @Responsebody code>.
Vous concevez-vous une API ou un formulaire de manutention?