2014-10-15 2 views
6

Мое приложение предоставляет интерфейс RESTful для выполнения некоторых действий. Я использую ExceptionMapper перехватывать исключения как NoResultException или EntityNotFoundException, а затем возвращает код состояния 404, или исключения, как NumberFormatException или ConstraintViolationException и возвращает код состояния 400 ... и т.д.Same ExceptionMapper для разных исключений

Моя проблема заключается только в том, что ExceptionMapper позволяет мне выбирать один вид Исключения каждый раз; поэтому я не могу использовать тот же класс для всех ошибок 400 и другой формы, все ошибки 404.

Есть ли способ создать ExceptionMapper, который отображает два разных вида исключений?

Моего другой варианта изменить свои функции, чтобы вернуть ответ вместо строки (помечено как @Produces("application/json")); и затем установите код состояния каждый раз, но я думаю, что это самое худшее ...

ответ

3

Вы могли бы написать один ExceptionMapper против исключения суперкласса (т.е. java.lang.Exception), а затем предоставляют различные модели поведения, основанные на конкретном классе исключения, например:

public class MyExceptionMapper implements ExceptionMapper<Exception> { 
    @Override 
    public Response toResponse(Exception exception) { 
     if (exception instanceof EntityNotFoundException) { 
      ... 
     } 
     else (exception instanceof NumberFormatException) { 
      ... 
     } 
     else { 
      // The catch-all handler... 
     } 
    } 
} 

Но, на мой взгляд, это не так чист, как писать отдельные картографами для каждого типа исключения. Во-первых, этот картограф поймает все Исключения, а для другого с течением времени этот класс может вырасти до громоздких размеров. Возможно, это вопрос стиля кода.

+1

Я тоже думал об этом; но, как вы говорите, не чист. По факту; вы можете написать несколько ExceptionMappers для разных классов и ExceptionMapper суперкласса из них (например, Exception); и исключения с конкретным ExceptionMapper будут использовать его; и все остальные будут использовать ExceptionMapper своего суперкласса. –

+1

Я по-прежнему предпочитаю кучу экземпляров проверок против фрагментации этой логики через несколько ненужных крошечных классов и упускаю из виду большую картину, то есть, какие коды ответов возвращаются для каких-то исключений – Amalgovinus

Смежные вопросы