4

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

{
  "id": 321,
  "username": "tombrown",
  "email": "tombrown@gmail.com",
  "password": "qwerty123",
  "activated": true 
}

所以问题是:

1)如果我指定错误类型的数据,服务器应该返回 400,例如,“id”:“threetwoone”而不是 int,“activate”:“yes”而不是 boolean 等。还是服务器应该在这里返回 422?

2)“id”值应该是int,但实际上是long int,例如9223372036854774700。

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

{
  "id": 321,
  "username": "tombrown",
  "activated": true 
}

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

4

1 回答 1

4

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

请参阅RFC 4918中的以下引用(对于您的情况,只需阅读JSON当它说XML):

11.2. 422 无法处理的实体

( 422Unprocessable Entity) 状态码表示服务器理解请求实体的内容类型(因此 415(Unsupported Media Type) 状态码是不合适的),并且请求实体的语法是正确的(因此是400(Bad Request) 状态码不合适)但无法处理包含的说明。例如,如果 XML 请求正文包含格式正确(即语法正确)但语义错误的 XML 指令,则可能会出现这种错误情况。

于 2018-04-04T10:18:22.490 回答