JAX-RS (Джерси) пользовательское исключение с XML или JSON

У меня есть сервис 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

44
задан Oskar 19 July 2010 в 05:29
поделиться

1 ответ

Вы можете попробовать добавить поле / свойство @ javax.ws.rs.core.Context javax.ws.rs.core.HttpHeaders в корневой класс ресурса, параметр метода ресурса или в пользовательский javax.ws.rs. ext.ExceptionMapper и вызов HttpHeaders.getMediaType ().

25
ответ дан 26 November 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: