J'ai un service REST construit en utilisant Jersey.
Je veux pouvoir définir le MIME de mes rédacteurs d'exceptions personnalisés en fonction du 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, je code dur application/json
mais c'est laisser les clients XML dans l'ignorance.
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());
}
}
Quel contexte puis-je utiliser pour obtenir les demandes actuelles ? Content-Type
?
Gracias.
Mise à jour en fonction de la réponse
Pour toute autre personne intéressée par 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 un POJO JAXB personnalisé.