jQuery没有将URL参数发布到Jersey服务?
这看起来很简单,但我不明白为什么它不起作用 我有一个新泽西服务定义:jQuery没有将URL参数发布到Jersey服务?,jquery,ajax,jersey,Jquery,Ajax,Jersey,这看起来很简单,但我不明白为什么它不起作用 我有一个新泽西服务定义: @POST public SomeObject createSomeObject( @QueryParam("firstParam") String firstParam, @QueryParam("secondParam") String secondParam) { // Does stuff, returns the object. } 现在,如果我做一个简单的curl,它可以正常工作: cur
@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
- 向Jersey服务添加
@消费(MediaType.APPLICATION\u FORM\u URLENCODED)
- 用
包装数据对象(我知道当JSON.stringify
时我需要这样做,但不应该在这里这么做contentType:'JSON'
我知道我可以自己编写URL参数并将其填入URL中,但这似乎不雅观,我不应该这样做。如果您使用POST发送多个参数,您必须执行应用程序/x-www-form-urlencoded POST,这样在请求中对参数进行编码,如:
firstParam=Bleh&secondParam=Blah
但是,要使用这些参数,必须对函数参数进行如下注释:
@POST
public SomeObject createSomeObject(@FormParam("firstParam") String firstParam,
@FormParam("secondParam") String secondParam) {
// Does stuff, returns the object.
}
请注意,注释是@FormParam而不是@QueryParam
请注意,如果执行“普通”POST,则函数只能有一个参数来接收取消发布的数据(从查询字符串url params分配的参数中获取APPAT)
上面是一个jquery请求,正如@FutureTematics所说,我们需要contentType:“application/x-www-form-urlencoded;charset=utf-8”。
然后在Jersey服务中添加@Consumes({MediaType.APPLICATION\u FORM\u URLENCODED})
@POST
@Produces({ MediaType.APPLICATION_JSON})
@Consumes( {MediaType.APPLICATION_FORM_URLENCODED})
public String execute(@FormParam("stoYardName") String data,
@FormParam("domTree") String domTree
) {
.........
}很有趣。我从来都不知道@FormParam。我回家后会试试的!谢谢!
@POST
@Produces({ MediaType.APPLICATION_JSON})
@Consumes( {MediaType.APPLICATION_FORM_URLENCODED})
public String execute(@FormParam("stoYardName") String data,
@FormParam("domTree") String domTree
) {
.........