我正在实现一个由 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 通常是更正确的状态。