Как подавить исключения Джерси, которые Джерси выдает автоматически?

Я использую Джерси 1.14 для REST в JAVA. Если есть какая-либо ошибка в теле POST ресурса, Джерси выдает и исключение, которое упоминает мои внутренние классы для клиента. Я по-прежнему хочу выдавать им ошибку, когда ошибка передается из моего приложения, но подавляю ошибки, которые выдает Джерси (для запросов, которые даже не попадают в мое приложение, поскольку Джерси идентифицирует исключение и выдает его). Я искал любой флаг для этого, но ничего не нашел. Есть ли способ сделать это?

РЕДАКТИРОВАТЬ: перефразируя вопрос: отключить/подавить трассировку стека ошибок для недопустимого ввода в майке

ОБНОВЛЕНИЕ: я попытался использовать ExceptionMapper, поймав java.lang.Exception. Он перехватывает исключение, например, когда отсутствует Content-Type, но не может перехватывать исключение, когда возникает ошибка в преобразовании объекта.


person baam    schedule 11.09.2013    source источник


Ответы (4)


Вы можете использовать ExceptionMapper. Вот старая статья об этом.

person Paulo Pires    schedule 11.09.2013
comment
Я попробовал это. Но это работает в том случае, если отсутствует, скажем, Content-Type, а не в случае, когда возникает ошибка при преобразовании объекта. Он по-прежнему выдает ошибку: Нераспознанное поле xyz (и после этого трассировка стека классов) - person baam; 11.09.2013
comment
Я нашел, что такое исключение. Он бросает JsonMappingException. Но теперь проблема в том, что уже есть класс ExceptionMapper, принимающий JsonMappingException, и во время регистрации маппера он иногда регистрирует мой маппер, а иногда и маппер библиотеки - person baam; 11.09.2013

Джерси будет генерировать исключения, которые не обрабатываются в вашем коде. Поэтому вам нужно обернуть код веб-сервиса в try/catch. И поймайте класс Exception, чтобы убедиться, что вы изящно обрабатываете его в своем классе веб-сервиса.

person Juned Ahsan    schedule 11.09.2013
comment
У меня не будет возможности создать исключение, так как Джерси вызовет исключение, поскольку он не сможет создать экземпляр входного объекта из входного значения. Есть ли способ перехватить исключение Джерси? Однако существует один интерфейс ExceptionMapper, который также перехватывает исключения, создаваемые методом. - person baam; 11.09.2013

Я полагаю, что этого можно добиться с помощью конфигурации сервера, поскольку на Джерси, похоже, нет соответствующих параметр конфигурации.

Какой контейнер сервлетов вы используете?


(EDIT) Для Tomcat выполните поиск «tomcat подавляет трассировку стека исключений». В большинстве ответов вы поместите элемент error-page в свой web.xml:

<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/your-custom-error-page.jsp</location>
</error-page>

И, конечно же, реализовать your-custom-error-page.jsp, который не включает трассировку стека. Он также может проверять среду приложения и отображать трассировку стека только в РАЗРАБОТКЕ.

person Nikos Paraskevopoulos    schedule 11.09.2013
comment
Я использую SpringServlet. Даже я просмотрел параметры конфигурации и ничего не нашел. - person baam; 11.09.2013
comment
SpringServlet является частью фреймворка, он будет работать на любом контейнере сервлетов J(2)EE. Я имею в виду сервер (вероятно, Tomcat? JBoss? Websphere? и т. д.) - person Nikos Paraskevopoulos; 11.09.2013
comment
о, я использую tomcat. - person baam; 11.09.2013

Если вы анализируете xml, вы можете написать собственный ContextResolver, чтобы поймать исключение. В случае json вам может понадобиться средство чтения/записи сообщений

person duahau    schedule 23.02.2014