AJAX POST 上的 JSON Stringify 400 错误请求
Posted
技术标签:
【中文标题】AJAX POST 上的 JSON Stringify 400 错误请求【英文标题】:JSON Stringify 400 Bad Request on AJAX POST 【发布时间】:2015-10-13 16:27:41 【问题描述】:我收到 AJAX Post 方法的 400 Bad Request。我在后端使用 Spring Data Rest Services。下面是我在前端的 JS 代码
var url = "/udb/data/SecurityRoleGroup",
groupData = id:"",name:"",accesslevel:"",roles:[];
groupData.id = groupId.val();
groupData.name = groupName.val();
groupData.accesslevel = groupDescription.val();
groupData.roles = multiselect_to.val();
$.ajax(url, type: 'POST',
dataType: 'json',
headers:
'X-CSRF-Token': _csrfGroup.val(),
'Content-Type' : 'application/json'
,
data: JSON.stringify(groupData),
contentType: 'application/json',
)
.done(function(results)
showMessage.html("Group details are saved successfully.");
showMessage.removeClass().addClass("alert alert-success").show();
)
.fail( function(xhr, textStatus, errorThrown)
showMessage.html("Error : Rolegroup AJAX request failed! Please try again.");
showMessage.removeClass().addClass("alert alert-danger").show();
);
虽然我正在序列化 JSON 数据。我仍然收到 400 Bad Request 错误。如果某些代码在后端中断或发送到服务器的请求出现问题,是否会出现此错误?
JAVA 实现
@RepositoryRestResource(collectionResourceRel = "SecurityRoleGroup", path = "SecurityRoleGroup")
public interface SecurityRoleGroupRepository extends PagingAndSortingRepository<SecurityRoleGroup, Long>
【问题讨论】:
控制台的响应错误信息是什么? "cause":null,"message":"无法处理托管/反向引用'defaultReference':类型:org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module 类型的值反序列化器$UriStringDeserializer 不支持它们" 您的服务器无法反序列化您的请求参数。基本上,您的请求无法与服务器已经知道的任何内容相匹配。 我认为您需要以所需的服务器格式对您的请求进行编码。或者请求格式不正确。还要检查方法(POST、GET、PUT)是否符合预期。 你不需要使用内容类型头,因为你使用了类型:json 【参考方案1】:如果您的数据中有 spl 字符,则需要在发送到服务器之前对数据进行编码。试试这个
$.ajax(url, type: 'POST',
dataType: 'json',
headers:
'X-CSRF-Token': _csrfGroup.val(),
'Content-Type' : 'application/json'
,
data: encodeURI(JSON.stringify(groupData)),
contentType: 'application/json',
)
【讨论】:
我会使用 encodeURIComponent insted of encodeURI。 “encodeURI 本身不能形成正确的 HTTP GET 和 POST 请求,例如 XMLHTTPRequests,因为“&”、“+”和“=”没有被编码,它们在 GET 和 POST 请求中被视为特殊字符。但是 encodeURIComponent , 确实对这些字符进行了编码。” developer.mozilla.org/en/docs/Web/javascript/Reference/… 为什么会这样!?我们在这个问题上花了 1 周时间 - 谢谢。 (从 Angular POST 请求到 JAVA 服务器。这行得通)。【参考方案2】:1.为什么需要发送数据转换字符串可以直接发送数据 2.您不需要将内容类型设置为application/json,因为您在数据类型中定义为json 3.如果您在这里使用 post 方法,请确保您在服务器端处理相同
【讨论】:
以上是关于AJAX POST 上的 JSON Stringify 400 错误请求的主要内容,如果未能解决你的问题,请参考以下文章
请求正文为空,POST 节点 js ajax 调用 json Web 令牌
jquery .ajax 对 ruby on rails 服务器的 post 请求在客户端出现 JSON.parse 错误
通过JQuery的$.ajax()把 json 数据 post 给 PHP