Я реализую веб-службу RESTful, поддерживаемую PostgreSQL.Когда PostgreSQL генерирует исключение SQLException, состояние ответа HTTP должно быть 400 Bad Request, если ошибка напоминает слишком длинную строку ввода значения, или 500 Internal Server Error, если диск вышел из строя.
ЧеловекуЭто видно из сообщения в исключении.Но есть ли способ (кроме аренды Уотсона теперь, когда он вернулся из Jeopardy), что моя программа может посмотреть на SQLException и угадать, является ли проблема ошибкой пользователя или системной ошибкой?
Я не знаюмного о SQL.Я отмечаю, что SQLState представляет собой строку из пяти символов, а первые два символа - это «Код класса».
Вот мои предположения:
Класс 00: успешное завершение, без исключенияброшенный.
Класс 01: Предупреждение.В этом случае выбрасывается исключение SQLException?Если это так, результатом, вероятно, должно быть 400 ошибочных запросов.
Класс 02: нет данных (нормальный результат, если результаты не возвращаются?)
Класс 03: оператор SQL еще не завершен: возможно, ошибка программирования, а не ошибка конечного пользователя, поэтому 500 Внутренняя ошибка сервера
Класс 08: Исключение соединения: очевидно, 500 Внутренняя ошибка сервера
Классы 09 - 21: Вероятно, 500 Внутренняя ошибка сервера
Класс 22: Исключение данных.Конкретный пример, над которым я работаю, поднимает «22001 ОШИБКА: значение слишком длинное для изменения типа символа (250)».Это должно быть возвращено как 400 Bad Request.(Существует проверка длины в поле «имя» перед выполнением оператора SQL, но фактически сохраненным значением является полное имя пути, то есть имя, добавленное к некоторому другому материалу.) Вероятно, я могу вернуть 400 Bad Request для других ошибок класса 22даже если многие из них будут вызваны ошибками программирования.
Другие классы выглядят как 500 Внутренняя ошибка сервера, как правило, будет более правильным статусом.