2

私は PostgreSQL を利用した RESTful Web サービスを実装しています。PostgreSQL が SQLException をスローした場合、値の入力文字列が長すぎるなどのエラーの場合、HTTP 応答ステータスは 400 Bad Request になるか、ディスクがクラッシュした場合は 500 Internal Server Error になります。

人間には、例外のメッセージから明らかです。しかし、私のプログラムが SQLException を見て、問題がユーザー・エラーなのかシステム・エラーなのかを推測できる方法はありますか?

SQLについてはよくわかりません。SQLState は 5 文字の文字列で、最初の 2 文字が「クラス コード」であることに注意してください。

これまでの私の推測は次のとおりです。

クラス 00: 正常終了、例外はスローされません。

クラス 01: 警告。この場合、SQLException はスローされますか? その場合、結果はおそらく 400 Bad Request になるはずです。

クラス 02: データなし (結果が返されない場合の正常な結果?)

クラス 03: SQL ステートメントがまだ完了していません: おそらくプログラミング エラーであり、エンド ユーザー エラーではないため、500 Internal Server Error

クラス 08: 接続例外: 明らかに 500 内部サーバー エラー

クラス 09 - 21: おそらく 500 内部サーバー エラー

クラス 22: データ例外。私が取り組んでいる特定の例では、「22001 ERROR: value too long for type character vary(250)」が発生します。これは 400 Bad Request として返されます。(SQL ステートメントが実行される前に「名前」フィールドの長さの検証がありますが、実際に格納される値はフル パス名、つまり、他のものに追加された名前です。) 他のクラス 22 エラーに対しては、おそらく 400 Bad Request を返すことができます。 、それらの多くはプログラミング エラーに起因しますが。

他のクラスは、500 Internal Server Error のように見えますが、通常はより正しいステータスです。

4

2 に答える 2

1

リクエストの検証を検討し、それらが有効な場合にのみ DB に転送すると、DB はそれらを正常に処理するはずです。この場合、postgresql によって返されるすべてのエラーは、内部サーバー エラーと見なすことができます。

于 2011-02-21T16:23:39.793 に答える