2011-01-23 2 views
4

я уже искал ответ на этот вопрос, и я нашел следующие предложения:Возвращение Null или выбросить исключение, еще раз

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

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

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

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

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

ответ

0

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

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

4

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

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

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

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

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

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