12
votes

Comment retourner les erreurs d'état d'erreur et de validation de ce contrôleur MVC Spring MVC?

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;
    }
}


1 commentaires

Vous concevez-vous une API ou un formulaire de manutention?


3 Réponses :


4
votes

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...
}


0 commentaires

8
votes

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."] }


0 commentaires

5
votes

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) {
  // ...
}


1 commentaires

Veuillez noter que si vous souhaitez revenir validationErrors dans le corps de réponse, la méthode ManiptionException nécessitera @Responsebody .