我有一个简单的休息服务器由jersey(java)和使用jquery的web界面。我有一个用于GET和POST模式的REST服务。 POST调用不起作用,它在输入数据端有一个json对象并返回一个json数据。
异常消息:
A message body reader for Java class ....RESTTaskDataInput, and Java type class ....RESTTaskDataInput, and MIME media type application/x-www-form-urlencoded; charset=UTF-8 was not found.
The registered message body readers compatible with the MIME media type are:
application/x-www-form-urlencoded; charset=UTF-8 ->
com.sun.jersey.core.impl.provider.entity.FormProvider...
发布呼叫的Jquery代码(点击按钮进行通话):
$("#task-launcher-post").click(function()
{
$("div#result").text("");
$.ajax({
type: "POST",
url: "resources/foo", <= This is OK, the rest interface is under that
data: {
code: "1234",
email: "my@email.com"
},
dataType: "json",
success: function(result)
{
$("div#result").append('...');
},
error: function(xml,result)
{
$("div#result").append('...');
}
});
});
Java REST服务代码
@Path("/foo")
public class RESTSERVICECrawler
{
...
@POST
@Consumes("application/json")
@Produces("application/json")
public RESTLaunchResult launch(RESTTaskDataInput input)
{
RESTLaunchResult result = new RESTLaunchResult();
...
return result;
}
}
Java RESTTaskDataInput代码(输入端使用的数据)
@XmlRootElement
public class RESTTaskDataInput
{
public String code;
public String email;
}
GET调用与url参数一起使用,但POST不在输入中使用json。我不知道为什么,我读了ajax的jquery文档,我认为rest服务器无法理解json输入数据。
答案 0 :(得分:0)
尝试:
public RESTLaunchResult launch(JAXBElement<RESTTaskDataInput> input) {
try {
RESTTaskDataInput data = input.getValue();
} ...
}
答案 1 :(得分:0)
感谢查理指示的解决方案。需要设置contentType。
var data = {
code: "123",
email: "email"
}
$.ajax({
type: "POST",
url: "resources/foo",
data: JSON.stringify(data),
dataType: "json",
contentType: 'application/json',
success: function(result)
{
$("div#result").append('<h5 id="result" class="text-success">' + result.success + " " + result.message + '</h5></div>');
},
error: function(xml,result)
{
$("div#result").append('<h5 id="result" class="text-error">' + result + '</h5>');
}
});