Java 返回哪个HTTP响应状态

Java 返回哪个HTTP响应状态,java,rest,http-status-codes,Java,Rest,Http Status Codes,我做了一个休息手术。用户想要删除一个对象 如果发生数据库错误 使用response.getWriter()写入响应时,如果发生IOException 我应该返回到客户端的状态代码(500、503等)(我的意思是哪个更方便?500在这里听起来最合适,除非您知道这是由于服务器过载造成的 如果response.getWriter()(或稍后对writer的调用)抛出一个IOException,那么我怀疑您已经超出了能够有效地影响客户端接收到的响应的阶段…没有那么多的500个代码,而且大多数代码都不

我做了一个休息手术。用户想要删除一个对象

  • 如果发生数据库错误
  • 使用
    response.getWriter()写入响应时,如果发生IOException

我应该返回到客户端的状态代码(500、503等)(我的意思是哪个更方便?

500在这里听起来最合适,除非您知道这是由于服务器过载造成的


如果
response.getWriter()
(或稍后对writer的调用)抛出一个
IOException
,那么我怀疑您已经超出了能够有效地影响客户端接收到的响应的阶段…

没有那么多的500个代码,而且大多数代码都不是“数据库失败”/“IOException发生”代码。请注意,您可能应该区分哪种类型的数据库错误,例如删除不存在的对象(请记住检查DELETE语句的“受影响的行”)将导致404状态

对于您的两个示例,您应该返回状态500。虽然如果response.getWriter()上发生IO异常,返回错误可能太晚,或者无论如何都无法到达客户端


另外,请查看页和页使用的响应代码。

如果是临时错误,503是合适的,因为它通常表示“稍后重试”。不过,我认为大多数数据库错误都不属于这一类。在大多数情况下,通用500是最佳响应。500列表中的选项不多:


如果由于删除是无效操作或类似操作而导致错误,我将使用403 forbidden:)

您没有向我们提供足够的信息来回答有关数据库错误的问题。如果数据库错误是由于违反引用完整性约束而导致的,那么您应该返回400错误,因为这是客户端的错误


您担心什么样的数据库错误?

@kamaci:是的-客户端通常不应该知道或关心后端技术是什么,更不用说哪个位失败了。@JonSkeet如果数据库由于引用完整性约束而产生错误,那么这是一个可以由客户端解决的问题,因此应该是400错误。@Darreller:我希望可以单独检测和处理,但我原则上同意-500确实应该是一个错误“你要求的很好,但我没能兑现。”@JonSkeet同意defn为500。然而,即使RI约束失败被DB层包装,并在通过HTTP时以类似NotAllowedToDeleteException的方式重新抛出,它也需要一个4XX状态码。服务器说“你不应该要求我这么做。”“@Darreller:当然。我当然同意,这并不总是像我们想说的那么容易。。。当您可以在进一步传播之前验证客户机请求时,这是一件好事,但事务性等会让人头疼……例如。尝试查询数据库、尝试连接数据库时出错