无法执行DELETE时返回的正确http状态代码是什么?

时间:2016-05-03 14:27:18

标签: hibernate http

我的应用程序接受http DELETE请求,这些请求将从通过hibernate管理的数据库中删除条目。

删除某些条目会产生hibernate.ConstraintViolationException,因为它们是另一个表中的键,因此它们不被接受。但是,此错误可能会根据DB的状态及时更改。

这种情况的正确http响应是什么?

我想到412(前提条件失败),因为系统未使用条目的前提条件。

2 个答案:

答案 0 :(得分:1)

这听起来很像客户端如果发生错误就无法纠正错误。只有这一点才有资格获得5xx-range状态代码:

  

状态代码的5xx(服务器错误)类表示服务器知道它已经出错或无法执行所请求的方法。 [...]这些响应代码适用于任何请求方法。

确切地说,我认为503 (Service Unavailable)在这里是有序的。该代码主要用于指示维护,但它实际上表明服务器端的临时状态阻止了请求的实现。这也符合this answer

如果您对此感到不安,可以按照推荐的顺序选择以下方法:

然而,如果客户端有机会纠正此错误(例如,通过先发出另一个请求),5xx级是不可能的,你应该从代码424开始。如果你关注WebDAV引入的这个代码,不用担心:它列在IANA HTTP Status Code Registry中,因此在HTTP中有效。

答案 1 :(得分:1)

你考虑过409吗? - " 409(冲突)状态代码表示由于与目标资源的当前状态冲突而无法完成请求。此代码用于用户可能能够解决冲突并重新提交请求的情况。服务器应该生成一个有效负载,其中包含足够的信息供用户识别冲突源。" - https://greenbytes.de/tech/webdav/rfc7231.html#status.409