Ответ 1
Зачем использовать одну возможность над другой, так как результат тот же?
Может быть, потому что в качестве (Java) программиста вы привыкли бросать исключения, когда нарушаются определенные правила приложения? Преобразуйте некоторую строку в число, и вы можете получить NumberFormatException
, использовать неправильный индекс в массиве и получить ArrayIndexOutOfBoundsException
, получить то, что вам не разрешено, и получить SecurityException
и т.д. Вы привыкли бросать исключения, когда "регулярный ответ" не может быть создан (будь то неправильный ввод или некоторая ошибка обработки).
Если вы не можете вернуть регулярный ответ, вы должны вернуть ответ об ошибке клиенту. Вы можете сделать это, либо выбросив исключение, либо создав ответ вручную. Это то же самое для вашего клиента, но это не то же самое для вашего кода на стороне сервера.
Выбрасывание исключения делает ваш код более чистым, проще рассуждать и, следовательно, легче понять. Идея состоит в том, чтобы подклассифицировать WebApplicationException
и создать из него свои собственные значимые исключения (например, ProductNotFoundException extends WebApplicationException { ... }
, AccessDeniedException extends WebApplicationException { ... }
или повторное использование исключений с aa сборщик исключений).
Затем он очистится до throw new ProductNotFoundException()
или throw new AccessDeniedException()
, и пусть структура обрабатывает его вместо создания Response
каждый а затем следуйте деталям, используемым для его построения, чтобы выяснить, что происходит в этом разделе кода.