У меня есть сервис REST, созданный с помощью Джерси.
Я хочу смочь установить MIME своих пользовательских устройств записи исключения в зависимости от MIME, который был отправлен на сервер. application/json
возвращается, когда json получен, и application/xml
когда xml получен.
Теперь я трудно кодирую application/json
, но это делает клиентов XML оставленными в темноте.
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());
}
}
Чем контекст может я наслаждаться для получения текущих запросов Content-Type
?
Спасибо!
Для кого-либо еще заинтересованного полным решением:
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
}
Вместе с 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();
}
}
Где ErrorResponseConverter является пользовательский POJO JAXB
Вы можете попробовать добавить поле / свойство @ javax.ws.rs.core.Context javax.ws.rs.core.HttpHeaders в корневой класс ресурса, параметр метода ресурса или в пользовательский javax.ws.rs. ext.ExceptionMapper и вызов HttpHeaders.getMediaType ().