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!
InformationsquelleAutor Oskar | 2010-07-12