0

我无法通过@FormParamJersey 传递我自己的对象。它始终为空。我有这样的方法:

@POST
@Path("search")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public SearchResult search(
        @FormParam("record") MyObject record,
        @FormParam("offset") Integer offset,
        ...) {
    ...
}

当我尝试传递 MyObject 时,它始终为空。参数偏移量传递正确。

JavaScript 中的客户端用于说明:

$.ajax({
    'url': url,
    'type': 'POST',
    'dataType': 'json', 'contentType': 'application/json',
    'data': {'record': record, 'offset': 123}
})

我认为这可能是 jQuery 的问题,所以我尝试将参数更改为一些废话'data': {'record': 'string instead of json', 'offset': 123},我得到 400 (Bad Request)。我还检查了请求的正文,看起来还不错。

但是当我将方法更改为如下所示时:

public SearchResult search(MyObject record) { ... }

以及相应的客户端脚本:

$.ajax({
    'url': url,
    'type': 'POST',
    'dataType': 'json', 'contentType': 'application/json',
    'data': JSON.stringify(record)
})

MyObject 正确获取。

我尝试使用具有相同结果的 GET 方法。

这可能是泽西岛的一个错误还是我错过了什么?

4

1 回答 1

1

@FormParam 仅适用于 application/x-www-form-urlencoded 媒体类型。因此,第二种方法(适合您的方法)是接收 JSON 消息实体的正确方法。

于 2012-07-24T09:25:07.787 回答