似乎这是一个经常被问到的不经常回答的问题。文档有点含糊不清。
我想发布一组参数,如下所述。 网络服务:
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response post(@FormParam("param") String param){
// code..
}
的javascript:
//var paramData = {"startDate":$("#startDate").val()};
var paramData = {startDate:$("#startDate").val()};
$.ajax({
type : 'POST',
url : 'mysite.com/post',
data: paramData,
contentType: 'application/x-www-form-urlencoded',
processData: false,
});
我已将contentType更改为false,尝试序列化和字符串化参数数据等。要么参数在服务中以null形式出现,要么返回不支持的媒体类型HTTP错误代码。
答案 0 :(得分:1)
1。默认情况下,您的update
将为contentType
,因此无需指定。
2。您为什么使用application/x-www-form-urlencoded
?你应该从这里阅读文档:
http://api.jquery.com/jQuery.ajax/
processData(默认值:true)
类型:布尔值
默认情况下,传入的数据 作为对象的数据选项(从技术上讲,除了一个以外的任何东西) string)将被处理并转换为查询字符串,拟合 到默认的内容类型" application / x-www-form-urlencoded"。如果 要发送DOMDocument或其他未处理的数据,请设置此项 选项为false。
3。由于processData: false
默认为processData
,您不需要true
,因此不需要false
指定它。
4。您只是将Object
作为data
传递,但您在哪里指定了param
,因为那是您的名字用于你的方法?看看:public Response post(@FormParam("param") String param)
5。由于param
是String
,您需要将Object
转换为queryString
(与如果我们正在序列化表单并且您可以使用jQuery
轻松完成,则应阅读以下内容:http://api.jquery.com/jquery.param/
6。因此,最后您的代码必须如下所示:
var data = {
name: 'Oscar',
lastname: 'Jara'
};
$.ajax({
type: 'POST',
url: 'rest/service',
data: {
param: $.param(data)
}
});
7。现在,如果您在param
服务中打印REST
变量所包含的内容,您将获得此信息:
name=Oscar&lastname=Jara