JAX-RS (Jersey) exception personnalisée avec XML ou JSON
J'ai un service REST construit à l'aide de Jersey.
Je veux être en mesure de définir le MIME de ma coutume exception des écrivains selon le MIME qui a été envoyé au serveur. application/json
est retourné lorsque json est reçu, et application/xml
lorsque le xml est reçu.
Maintenant j'ai le code application/json
, mais qui fait le XML clients laissés dans l'obscurité.
public class MyCustomException extends WebApplicationException {
public MyCustomException(Status status, String message, String reason, int errorCode) {
super(Response.status(status).
entity(new ErrorResponseConverter(message, reason, errorCode)).
type("application/json").build());
}
}
Ce contexte puis-je faire appel pour obtenir les demandes actuelles Content-Type
?
Merci!
Mise à jour basé sur répondre
Pour toute autre personne intéressée dans la solution complète:
public class MyCustomException extends RuntimeException {
private String reason;
private Status status;
private int errorCode;
public MyCustomException(String message, String reason, Status status, int errorCode) {
super(message);
this.reason = reason;
this.status = status;
this.errorCode = errorCode;
}
//Getters and setters
}
Avec un ExceptionMapper
@Provider
public class MyCustomExceptionMapper implements ExceptionMapper<MyCustomException> {
@Context
private HttpHeaders headers;
public Response toResponse(MyCustomException e) {
return Response.status(e.getStatus()).
entity(new ErrorResponseConverter(e.getMessage(), e.getReason(), e.getErrorCode())).
type(headers.getMediaType()).
build();
}
}
Où ErrorResponseConverter est une coutume JAXB POJO
- Quelles seraient les ErrorResponseConverter classe ressembler?
- Merci de nous montrer votre mise en œuvre de ErrorResponseConverter. Merci!
- Il serait juste certains des POJO qui sera retourné à l'utilisateur contenant des informations sur l'erreur. Vous de les annoter pour Jackson/JAXB/que ce soit pour soutenir différents types de contenu.
- J'ai pensé à elle. Merci pour votre réponse si!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer d'ajouter un @javax.ws.rs.de base.Contexte javax.ws.rs.de base.HttpHeaders terrain/propriété de la racine de votre classe de ressource, ressource paramètre de méthode, ou à une coutume javax.ws.rs.ext.ExceptionMapper et de l'appel de HttpHeaders.getMediaType().
en-têtes.getMediaType() réagit avec le type de média de l'Entité, de ne pas l'en-tête Accept. Le moyen le plus approprié pour convertir l'exception est avec l'en-tête Accept de sorte que votre client obtient la réponse dans le format demandé. Compte tenu de la solution ci-dessus, si votre demande se présente comme suit (la note JSON accepter d'en-tête, mais l'Entité XML), vous obtiendrez XML dos.
La mise en œuvre correcte est encore, pour utiliser l'en-tête Accept: