Глобальная обработка исключений в Джерси
Есть ли способ иметь глобальную обработку исключений в Джерси? Вместо отдельных ресурсов, имеющих блоки try/catch, а затем вызывая некоторый метод, который затем санирует все исключения, которые должны быть отправлены обратно клиенту, я надеялся, что есть способ поставить это, когда на самом деле вызываются ресурсы. Возможно ли это? Если да, то как?
Вместо того, чтобы sanitize(e)
выбрал какое-то исключение, настроенное Джерси, для сервлета Джерси:
@GET
public Object getStuff() {
try {
doStuff();
} catch (Exception e) {
ExceptionHandler.sanitize(e);
}
}
Наличие:
@GET
public Object getStuff() throws Exception {
doStuff();
}
где исключение будет передано тому, что я могу перехватить, и вызовет sanitize(e)
оттуда.
Это действительно просто для того, чтобы упростить все ресурсы Джерси и гарантировать, что исключения, возвращаемые клиенту, всегда в какой-то понятной форме.
Ответы
Ответ 1
Да. JAX-RS имеет концепцию ExceptionMappers. Вы можете создать свой собственный интерфейс ExceptionMapper, чтобы сопоставить любое исключение с ответом. Для получения дополнительной информации см.: https://jersey.github.io/nonav/documentation/1.12/jax-rs.html#d4e435
Ответ 2
javax.ws.rs.ext.ExceptionMapper - ваш друг.
Источник: https://jersey.java.net/documentation/latest/representations.html#d0e6665
Пример:
@Provider
public class EntityNotFoundMapper implements ExceptionMapper<javax.persistence.EntityNotFoundException> {
public Response toResponse(javax.persistence.EntityNotFoundException ex) {
return Response.status(404).
entity(ex.getMessage()).
type("text/plain").
build();
}
}