我在前端有一个Ajax请求,该请求将JSON文档发送到rest服务实现。 它通过Spring进行了连接,REST服务中的@GET请求运行良好。
问题是,每当我尝试使用@POST方法时,它总是会引发415错误。
我已经尝试根据各种在线指南来操纵我如何将其发送回去,以及post方法中接受的变量类型,但是我不确定下一步要去哪里。
我仔细检查了我是否确实将数据发送到@POST方法,但是我感觉它根本没有解析JSON并抛出错误。
不幸的是,如果这是问题,我看不到如何解决。
在下面,我将所有内容都简化为一个仍然会产生415错误的简单形式。
AJAX请求:
function post_request(json_data) {
$j.ajax({
url : '../api/createDisplayGroup/postHtmlVar/' + containerID + '/' + containerType,
data: JSON.stringify(json_data),
dataType: 'json',
type : 'post'
}).done(function(response) {
run_update(response);
}).error(function(jQXHR, textStatus, errorThrown) {
alert('error getting request');
});
};
春季XML:
REST实现(仅@POST):
@POST
@Path("/postHtmlVar/{containerId}/{contentType}")
@Consumes(MediaType.APPLICATION_JSON)
public List postHtml(@PathParam("containerId") String containerId, @PathParam("contentType") String contentType, List displayGroups) {
Long contId = Long.parseLong(containerId);
Long contType = Long.parseLong(contentType);
//return convertToResponse(peopleFilterService.getDisplayGroups(contId, contType));*/
return testDisplayGroup();
}
POST JSON的可能重复失败,并显示415不支持的媒体类型,Spring 3 mvc
您收到的错误如下:
415 Unsupported Media Type
The request entity has a media type which the server or resource does not support. For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format.
(wikipedia)
原因可能是$j.ajax调用,请尝试添加contentType参数,例如:
...
$j.ajax({
url : '../api/createDisplayGroup/postHtmlVar/' + containerID + '/' + containerType,
data: JSON.stringify(json_data),
dataType: 'json',
type : 'post',
contentType: 'application/json'
...
然后,它将与您的postHtml方法使用的@Consumes批注的值匹配,请注意:
The @Consumes annotation is used to specify which MIME media types of representations a resource can accept, or consume, from the client. (Oracle)
默认情况下,ajax调用的媒体类型将为application/x-www-form-urlencoded,因此您的处理程序方法将不匹配,从而导致415错误。
另外:在ajax调用中,contentType指定要发送到服务器的数据类型,而dataType指定要返回的数据类型。
因此,而不是在ajax调用中使用" contentType:application / json"代替" type:json"?
除了dataType之外,您还需要添加contentType,检查更新后的答案。
这似乎至少在做一些不同的事情...现在出现500错误...即时通讯猜测即时通讯将在方法定义中需要不同的类型...如果即时通讯发送的是JSON对象数组,我可以 只是使用List ?
恐怕我不知道该怎么做-也许值得提出一个新的问题,但是,这个答案可能会有所帮助。