Лучший способ определить коды ошибок / строк в Java? - PullRequest
110 голосов
/ 15 января 2009

Я пишу веб-сервис на Java и пытаюсь найти лучший способ определения кодов ошибок и связанных с ними строк ошибок . Мне нужно, чтобы числовой код ошибки и строка ошибки были сгруппированы вместе. И код ошибки, и строка ошибки будут отправлены клиенту, обращающемуся к веб-службе. Например, когда возникает SQLException, я могу сделать следующее:

// Example: errorCode = 1, 
//          errorString = "There was a problem accessing the database."
throw new SomeWebServiceException(errorCode, errorString);

Клиентской программе может отображаться сообщение:

"Произошла ошибка № 1: произошла ошибка проблема с доступом к базе данных. "

Моей первой мыслью было использование Enum кодов ошибок и переопределение методов toString для возврата строк ошибок. Вот что я придумал:

public enum Errors {
  DATABASE {
    @Override
    public String toString() {
      return "A database error has occured.";
    }
  },

  DUPLICATE_USER {
    @Override
    public String toString() {
      return "This user already exists.";
    }
  },

  // more errors follow
}

Мой вопрос: Есть ли лучший способ сделать это? Я бы предпочел решение в коде, а не чтение из внешнего файла. Я использую Javadoc для этого проекта, и возможность документировать коды ошибок в строке и автоматически обновлять их в документации.

Ответы [ 12 ]

0 голосов
/ 02 марта 2016

Использование interface в качестве константы сообщения, как правило, плохая идея. Он будет постоянно проникать в клиентскую программу как часть экспортированного API. Кто знает, что более поздние клиентские программисты могут анализировать эти сообщения об ошибках (общедоступные) как часть своей программы.

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

0 голосов
/ 29 апреля 2014

перечисление для определения кода ошибки / сообщения - все еще хорошее решение, хотя оно имеет проблемы с i18n. На самом деле у нас может быть две ситуации: код / ​​сообщение отображается конечному пользователю или системному интегратору. Для более позднего случая I18N не нужен. Я думаю, что веб-сервисы, скорее всего, поздний случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...