我正在将图像发布到服务器(Java和Spring)。
可能会发生几件事:
200
和图片ID。SaveFileException
)。 DatabaseException
)更新新的图像记录。IOException
。 简而言之,我无法保存/创建图像。
我应该返回什么HTTP代码?
我应该根据Exception
返回不止一个代码和不止一条消息吗?
答案 0 :(得分:7)
首先,让我强调一下,状态代码旨在表示服务器试图理解并满足客户请求的结果。
如果一切顺利,那么我将返回
200
和图片ID。
似乎还可以,但是我建议您返回201
和Location
标头。引用关于POST
方法的RFC 7231:
如果由于成功处理
POST
请求而在原始服务器上创建了一个或多个资源,则原始服务器应发送包含{{1}的201
(已创建)响应}标头字段,它为创建的主要资源提供标识符,并提供一种描述,同时引用新资源时描述请求的状态。
Location
标头与Location
一起表示新创建的资源位于何处。如果没有提供201
标头,则客户端应假定资源由有效请求URI标识:
Location
(已创建)状态码表示请求已得到满足,并导致创建了一个或多个新资源。由请求创建的主要资源由响应中的201
头字段标识,或者,如果未收到Location
字段,则由有效请求URI标识。 [...]
客户可以执行新请求并解决问题吗?如果是这样,请选择Location
范围内的状态代码:
状态代码的
4xx
(客户端错误)类表明客户端似乎已经出错。除非响应4xx
请求,否则服务器应发送表示形式,其中包含错误情况的说明以及错误情况是暂时还是永久的。这些状态代码适用于任何请求方法。
Michael Kropat汇总了一个非常有用的set of flowcharts,可能会给您带来一些启发。请参阅下表,以确定最合适的HEAD
状态代码:
根据导致错误的原因,一些有效的选项是:
4xx
(有效负载过大)状态代码表示服务器拒绝处理请求,因为请求有效负载大于服务器愿意或能够处理的请求。 [...]
6.5.13. 415 Unsupported Media Type
413
(不受支持的媒体类型)状态码表示原始服务器拒绝为请求提供服务,因为有效负载采用的是目标资源上此方法不支持的格式。格式问题可能是由于请求的指示为415
或Content-Type
,或者是直接检查数据的结果。
Content-Encoding
(错误请求)状态码表示服务器由于某些被视为客户端错误(例如格式错误的请求语法,无效的请求消息框架或欺骗性请求路由)。
如果错误是由服务器引起的,则400
范围内的状态码将是准确的:
状态代码的
5xx
(服务器错误)类表明服务器知道它已错误或无法执行所请求的方法。除非响应5xx
请求,否则服务器应发送表示形式,其中包含错误情况的说明以及错误情况是暂时的还是永久的情况。
请参见以下流程图:
我建议500
:
6.6.1. 500 Internal Server Error
HEAD
(内部服务器错误)状态代码表示服务器遇到意外状况,阻止其满足请求。
答案 1 :(得分:2)
取决于阻止图像发布到服务器的问题。
如果图像或请求的格式不正确,则应为4XX。
例如:通用400 Bad Request
或特定415 Unsupported Media Type
,409 Conflict
,413 Request Entity Too Large
。
如果问题是服务器端错误,则错误代码应在5XX上:
例如常规:500 Internal Server Error
或503 Service Unavailable
,具体:507 Insufficient Storage (WebDAV)
504 Gateway Timeout
有时,对于错误具体说明可以帮助找到使POST正常工作的解决方案。但这取决于您是否希望避免并解决该错误。
答案 2 :(得分:1)
无法将图像保存到文件系统(保存文件异常)。
数据库无法使用新的URL更新新的图像记录 (DatabaseException)。
或者抛出IOException。
简而言之,我无法保存/创建图像。
我应该返回什么http代码?
您引用的所有特定示例-这将是“内部服务器错误”(Http Status-500)。也有409例。
我应该根据代码返回不止一个代码和不止一条消息 例外。
根据显式异常自定义消息更有用,但我认为,作为客户端的过度工程并不是解决此类错误的人。如果应该纠正其请求的客户端,则根据该请求放置消息(但Http Status 400-Bad Request就是这种情况)。
如果客户端不是应该以任何方式解决该问题(即以任何方式处理该问题)的客户端,则它只需要有关错误的信息,因此请输入简单的消息和Http Status 500。 / p>
答案 3 :(得分:0)
您可能会返回500内部服务器异常。