我有一个JSON请求,我张贴到一个HTTP URL。

如果requestdresource字段存在,但“Roman”是这个字段的无效值,这应该被视为400吗?

[{requestedResource:"Roman"}] 

这应该被视为400的“blah”字段不存在吗?

[{blah:"Roman"}]

当前回答

作为补充,对于那些可能遇到与我相同问题的人,我使用$。ajax post表单数据到服务器,我也得到了400错误在第一次。

假设我有一个javascript变量,

var formData = {
    "name":"Gearon",
    "hobby":"Be different"
    }; 

不要像下面这样直接使用变量formData作为关键数据的值:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: formData,
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

相反,使用JSON。stringify封装formData如下:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: JSON.stringify(formData),
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

无论如何,正如其他人所说明的那样,错误是因为服务器无法识别请求导致语法错误,我只是在实践中提出一个实例。希望对大家有所帮助。

其他回答

作为补充,对于那些可能遇到与我相同问题的人,我使用$。ajax post表单数据到服务器,我也得到了400错误在第一次。

假设我有一个javascript变量,

var formData = {
    "name":"Gearon",
    "hobby":"Be different"
    }; 

不要像下面这样直接使用变量formData作为关键数据的值:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: formData,
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

相反,使用JSON。stringify封装formData如下:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: JSON.stringify(formData),
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

无论如何,正如其他人所说明的那样,错误是因为服务器无法识别请求导致语法错误,我只是在实践中提出一个实例。希望对大家有所帮助。

从w3.org

10.4.1 400个错误请求 由于格式错误,服务器无法理解请求 语法。客户端不应该重复请求 修改。

想想期望。

作为客户端应用程序,您希望知道服务器端是否出现了问题。如果服务器需要在blah缺失或requestedResource值不正确时抛出错误,那么400错误将是合适的。

在我的情况下,这意味着我在json中提供的数据与db所需的数据不兼容,例如电子邮件地址已经添加到db,然后抛出代码400

400表示请求格式不正确。换句话说,客户端发送给服务器的数据流没有遵循规则。

在带有JSON有效负载的REST API的情况下,400通常(我认为是正确的)用于根据服务的API规范指示JSON在某种程度上是无效的。

根据这种逻辑,您提供的两个场景都应该是400s。

假设这是XML而不是JSON。在这两种情况下,XML都不会通过模式验证——要么是因为元素未定义,要么是因为元素值不正确。这是个糟糕的要求。这里也是一样。