请求正文中出现错误时的 HTTP 状态代码

Mic*_*345 6 http http-status-codes http-status-code-400 http-status-code-422

有人可以澄清以下情况下我应该期待什么状态代码吗?例如,我正在发送具有以下正文格式的 POST 请求:

\n\n
{\n  "id": 321,\n  "username": "tombrown",\n  "email": "tombrown@gmail.com",\n  "password": "qwerty123",\n  "activated": true \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以问题是:

\n\n

1)如果我指定错误类型的数据,例如“id”:\xe2\x80\x9ctwoone\xe2\x80\x9d而不是int,服务器是否应该返回400,“activated”:\xe2\x80\x9cyes\xe2 \x80\x9d 而不是布尔值等。或者服务器应该在这里返回 422?

\n\n

2) \xe2\x80\x9cid\xe2\x80\x9d 值应该是 int,但实际上它是 long int,例如 9223372036854774700。

\n\n

3)正文中缺少某些字段,例如我尝试发送:

\n\n
{\n  "id": 321,\n  "username": "tombrown",\n  "activated": true \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这些示例是否会导致 400、422 或其他一些选项?什么样的反应应该是正确的?

\n

cas*_*lin 11

如果 JSON 在语法上无效,则返回400。如果 JSON语法有效内容无效,则返回422以指示服务器无法处理该请求实体。

请参阅RFC 4918中的以下引用(根据您的情况,只需在显示XML时阅读JSON):

11.2. 422 无法处理的实体

(不可处理的实体)状态代码422意味着服务器了解请求实体的内容类型(因此 415(不支持的媒体类型)状态代码不合适),并且请求实体的语法是正确的(因此400(错误请求)状态代码不合适)但无法处理所包含的指令。例如,如果 XML 请求正文包含格式正确(即语法正确)但语义错误的 XML 指令,则可能会出现此错误情况。