我的测试html页面中包含以下javascript,用于将ajax请求发送到我使用netbeans构建的Java Restful Web服务(通常通过使用“来自数据库的Restful Web服务”功能自动生成)。
这是我的测试html页面中的ajax查询:
$(function(){
$('.message-button').on('click', function(e){
var resultDiv = $("#resultDivContainer");
$.ajax({
headers: { 'Accept': 'application/json',
'Content-Type': 'application/json'
},
'type': 'POST',
'url': 'http://localhost:8080/xxxAPI/api/activity',
'data': { "baseItemId": "2" },
'dataType':'json',
'success': function(data) {
var xmlstr = data.xml ? data.xml : (new XMLSerializer()).serializeToString(data);
$("#resultDivContainer").text(xmlstr);
},
'error': function(jqXHR, textStatus, errorThrown) {
alert(' Error in processing! '+textStatus + 'error: ' + errorThrown);
}
});
})
});
这也是我的Java代码中接受发布请求的部分:
@POST
@Override
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void create(XxxxxActivity entity) {
super.create(entity);
}
当我从测试页(针对该版本的测试页)进行请求时,出现以下错误:
加载资源失败:服务器响应状态为415
(不支持的媒体类型)
或此错误:
POST http://localhost:8080/xxxAPI/api/activity 415(不受支持
媒体类型)
到目前为止,我已经尝试过对ajax请求进行各种更改,如关于stackoverflow的类似问题所建议的那样,包括将类型更改为
jsonp
,将json数据置于双引号中,添加标头以及将数据类型更改为xml。他们都没有工作。另外,由于我有时会设法从服务器获得响应,所以我想知道问题是否出在Java代码中的xml解析上。我相信可能的解决方法是添加杰克逊jar文件,但是我不知道如何在netbeans上添加它们,因为WEB_INF中没有lib文件夹。
我也想知道jquery ajax请求是否有任何问题。这个问题困扰了我好几天了。
PS:还请注意,来自浏览器的GET请求工作正常。我没有在这个项目中使用过Maven。
最佳答案
更换
'data': { "baseItemId": "2" },
与
'data': JSON.stringify({ "baseItemId": "2" }),
对象JSON可用here。
编辑
添加属性
contentType: 'application/json; charset=UTF-8'
从ajax调用中删除属性头。