Au Printemps 3 est-il possible de définir dynamiquement la raison de @ResponseStatus?
J'ai une classe d'exception personnalisée annoté pour retourner un HttpStatus
:
@ResponseStatus(value=HttpStatus.BAD_REQUEST, reason="Invalid parameter")
public class BadRequestException extends RuntimeException
{
public BadRequestException(String msg)
{
super(msg);
}
}
Cela fonctionne, lorsque je jette un BadRequestException
de mon contrôleur, mais la raison est toujours "paramètre non Valide" bien sûr. Est-il un moyen de régler le retour de la raison dans cette classe? J'aimerais passer une chaîne de caractères à utiliser comme motif.
Merci!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid foo");
response.sendError
.Si vous omettez la 'raison' attribut dans le @ResponseStatus annotation sur une exception personnalisée,
de jeter l'exception
Le message de l'exception vient à travers comme le "message" de la "data" dans le JSON de sortie. Il semble que la 'raison' dans l'annotation remplace le comportement personnalisé.
La bonne façon est d'introduire le gestionnaire d'exception dans votre contrôleur, vous pouvez définir le corps de la réponse de tous les codes de statut:
De vous déplacer, vous n'avez pas à polluer votre modèle/classes d'exception avec n'importe quel Web Spring MVC annotations et de la dépendance.
Si vous souhaitez partager le gestionnaire avec tous les contrôleur de regarder dans @ControllerAdvice.
Annotations sont destinés à être statique, et ne peut pas être défini de façon dynamique à partir de votre classe. Je suggère la création d'une sous-classe de votre
BadRequestException
pour chaque type de scénario d'échec, et en annotant différemment.Ce n'est pas seulement servir comme une solution de contournement, si vous êtes en cachant les détails de ce qui s'est passé dans la
reason
message, vous venez de perdre de la souplesse parce que tout le code qui attrape unBadRequestException
aurez à faire face à tous les scénarios d'échec de la même façon.La manière la plus simple il suffit de régler le
response.setStatus()
. Facile et propre, vous pouvez la modifier à n'importe quel statut vous voulez seulement au lieu deex.getStatusCode()
ajouter votre code.Le type de retour est également de votre choix, je suis l'aide de la Chaîne b/c affichage de cela plus tard.
Par le chemin, la
sendError
n'est pas une bonne idée, parce que JBoss, par exemple, est l'ajout d'un lot de HTML pour la réponse.La "raison" est facultative, vous pouvez omettre la et met en œuvre la méthode abstraite public String raison de passage de l'Erreur.
Lien: http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/ResponseStatus.html
reason
ougetReason
méthode pour l'OPpublic class BadRequestException extends RuntimeException
permettent de définir de façon dynamique un message?