这看起来很简单,但我无法弄清楚为什么它不起作用。
我定义了泽西服务:
@POST
public SomeObject createSomeObject(
@QueryParam("firstParam") String firstParam,
@QueryParam("secondParam") String secondParam)
{
// Does stuff, returns the object.
}
现在,如果我做一个简单的curl
,它可以正常工作:
curl -X POST "http://localhost:8080/path/to/service?firstParam=Bleh&secondParam=Blah
但是,以下结果导致Java中的firstParam和secondParam null
:
$.ajax({
url: '/path/to/service',
type: 'POST',
data: {
firstParam: 'Bleh',
secondParam: 'Blah'
},
success: doStuff,
error: eek
});
这看起来非常直截了当。我觉得他们应该表现得完全一样。我错过了什么?我尝试过的事情(但似乎没有必要):
contentType: 'application/x-www-form-urlencoded'
添加到ajax
来电。@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
添加到Jersey服务。JSON.stringify
包装数据对象(我知道我需要在contentType: 'json'
时执行此操作,但不应该在此处。我知道我可以自己编写URL参数并将其填入URL中,但这似乎不够优雅,我不应该这样做。
答案 0 :(得分:0)
如果您使用POST发送多个参数,则需要执行application / x-www-form-urlencoded POST,这样params就会在请求中编码,如:
firstParam=Bleh&secondParam=Blah
但是,要消耗theese params,你必须注释函数params,如:
@POST
public SomeObject createSomeObject(@FormParam("firstParam") String firstParam,
@FormParam("secondParam") String secondParam) {
// Does stuff, returns the object.
}
注意注释是@FormParam而不是@QueryParam
请注意,如果你执行“普通”POST,你的函数只能有一个参数来接收de POSTed数据(来自查询字符串url params指定的params的appart)
答案 1 :(得分:0)
$.ajax({
type: "POST",
contentType: "application/x-www-form-urlencoded;charset=utf-8",
url: url,
data: data,
dataType: 'json',
timeout: 3000,
// jsonpCallback:"foo",
success:function(response){
console.log(response);
},
error: function(){
console.log("error!");
}
});
上面是一个jquery请求,正如@futuretelematics所说我们需要contentType:“application / x-www-form-urlencoded; charset = utf-8”。 然后在Jersey服务中添加@Consumes({MediaType.APPLICATION_FORM_URLENCODED})。
@POST
@Produces({ MediaType.APPLICATION_JSON})
@Consumes( {MediaType.APPLICATION_FORM_URLENCODED})
public String execute(@FormParam("stoYardName") String data,
@FormParam("domTree") String domTree
) {
.........
};