2

我正在实现一个由 PostgreSQL 支持的 RESTful Web 服务。当 PostgreSQL 抛出 SQLException 时,如果错误类似于输入字符串的值太长,则 HTTP 响应状态应为 400 Bad Request,如果磁盘崩溃,则应为 500 Internal Server Error。

对于人类来说,从异常中的消息中可以明显看出这一点。但是有什么方法(现在他从 Jeopardy 回来后不租用 Watson)我的程序可以查看 SQLException 并猜测问题是用户错误还是系统错误?

我对SQL不太了解。我注意到 SQLState 是一个五个字符的字符串,前两个字符是“类代码”。

到目前为止,这是我的猜测:

Class 00:成功完成,没有抛出异常。

01 级:警告。在这种情况下会抛出 SQLException 吗?如果是这样,结果应该是 400 Bad Request。

Class 02:No Data(没有返回结果时的正常结果?)

03 类:SQL 语句尚未完成:可能是编程错误,而不是最终用户错误,因此是 500 Internal Server Error

Class 08: Connection Exception: 显然是 500 Internal Server Error

课程 09 - 21:可能 500 内部服务器错误

第 22 类:数据异常。我正在处理的具体示例引发“22001 错误:类型字符变化(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 回答
0

手册是一个好的开始:附录 A. PostgreSQL 错误代码

于 2011-02-21T15:41:31.900 回答