Какое исключение здесь наиболее уместно? - PullRequest
0 голосов
/ 17 июля 2011

Я проверяю некоторые входные данные из URL-адреса Restlet в служебном методе (таким образом, если меняются действия, которые я выполняю, я изменяю их только в одном месте, ура).LegalName по существу проверяет значение как буквенно-цифровое, но я могу разрешить другие символы в ближайшее время.

Я стараюсь, чтобы мои исключения имели смысл - какое исключение будет лучшим в этом сценарии?

public static String getProperty(Request request, String key) {
    String value = request.getAttributes().get(key).toString();
    // unless something is specifically text, it is a property
    if(legalName(value)) return value;
    throw new IllegalArgumentException(value);

}

Мои мысли таковы:

  • IllegalArgumentException - ключ напрямую приводит к недействительному результату
  • IllegalStateException - мы пытаемся использовать несоответствующее значение
  • Нет исключения - вернуть пустую строку и зарегистрировать факт совершения нарушения
  • Нет исключения - удалить все нежелательные символы, вернуть очищенную строку и зарегистрировать факт

КонечноЯ не первый человек, который должен подтвердить ввод перед: -)

Ответы [ 3 ]

2 голосов
/ 17 июля 2011

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

Если вы предпочитаете придерживаться своего решения:

  • переименуйте метод в validateName(..) и дайте ему сгенерировать исключение. Если нет - верните значение.
  • javax.validation.ValidationException выглядит лучше, но вы можете использовать любой из двух IllegalXException, которые вы упомянули. Просто убедитесь, что у них есть более подробное сообщение.
1 голос
/ 17 июля 2011

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

0 голосов
/ 17 июля 2011

Вы можете использовать Custom (Your Own) Exception Class. В зависимости от ситуации или проверки вы можете выбросить его с соответствующим сообщением. Например: 1. Для случая исключения из недопустимого аргумента Обработайте этот блок кода в попытках catch и в catch, чтобы создать собственное исключение с соответствующим сообщением.

...