Вернуть null или выбросить исключение еще раз

Я уже искал ответ на этот вопрос и нашел следующие предложения:

  1. Если вы всегда ожидаете найти значение, тогда вызовите исключение, если оно отсутствует. Исключение будет означать, что возникла проблема. Если значение может отсутствовать или присутствовать, и оба значения допустимы для логики приложения, верните значение NULL.
  2. Выбрасывайте исключение только в том случае, если это действительно ошибка. Если ожидается, что объект не существует, верните значение null.

Но как мне интерпретировать их в моем (таком случайном) случае: контроллер моего веб-приложения получает запрос на отображение сведений для пользователя с определенным идентификатором. Контроллер просит уровень сервиса получить пользователя, а затем сервис возвращает объект, если он найден. В противном случае выдается перенаправление в местоположение «по умолчанию».

Что мне делать, если кто-то передает неверный идентификатор пользователя в URL-адрес запроса? Должен ли я рассматривать это как «ожидаемое поведение» и возвращать значение null контроллеру, или, возможно, мне следует называть это «проблемой или неожиданным поведением» и, таким образом, генерировать исключение внутри метода службы и ловить его внутри контроллера?

Технически это не большая разница, но я бы хотел сделать это правильно, следуя стандартным правилам. Спасибо заранее за любые предложения.

РЕДАКТИРОВАТЬ: Я предполагаю, что URL-адреса, сгенерированные приложением, действительны и существуют - при нажатии пользователем должен быть найден пользователь с идентификатором сертификата. Я хочу знать, как справиться с ситуацией, когда пользователь пытается получить доступ к URL-адресу с неправильным (не существующим) идентификатором пользователя, вручную вводя URL-адрес в адресную строку браузера.


person user1293910asd    schedule 23.01.2011    source источник


Ответы (3)


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

(OTOH, если идентификатор пользователя в запросе был автоматически сгенерирован другим приложением / поступил из БД и т. Д., Неверный идентификатор пользователя был бы неожиданным, поэтому было бы целесообразно исключение.)

person Péter Török    schedule 23.01.2011

Мое личное предложение заключалось бы в том, чтобы зарегистрировать сведения об ошибке (IP-адрес, неверный идентификатор пользователя) и перенаправить пользователя на страницу с ошибкой, в которой говорится, что произошла какая-то ошибка, и администраторы были уведомлены. Нажмите на такую-то ссылку, чтобы вернуться на свою домашнюю страницу и т. Д.

Дело в том, что независимо от того, генерируете ли вы исключение или возвращаете null, просто убедитесь, что внешний фильтр или обработчик "регистрирует" детали до того, как ответ будет возвращен пользователю.

person Sanjay T. Sharma    schedule 23.01.2011

What should I do when someone passes invalid user id inside the request URL?

У вас есть два варианта: показать страницу «по умолчанию», которую вы упомянули, или вернуть «Не найдено» / 404.

Что касается null, это зависит. Если вы считаете null неприемлемым для ссылки, то пометьте его с помощью @NotNull, и аннотация должна позаботиться о том, чтобы делать правильные действия при получении null ссылка: то есть выброс (непроверенное) исключение (конечно, вам нужно работать с замечательной аннотацией @NotNull, чтобы это работало).

Что вы будете делать на более высоких уровнях цепочки, зависит от вас: для меня, когда я возвращаю 404 кому-то, пытающемуся подделать идентификаторы пользователей, звучит очень близко к оптимальному.

person SyntaxT3rr0r    schedule 23.01.2011