问题:Jersey umarshalls参数QueryParam / PathParam为null

时间:2012-07-24 08:08:41

标签: java jersey

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

@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时,它始终为null。参数偏移量正确传递。

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(错误请求)。我也检查了请求的正文,看起来没问题。

但是当我将方法改为这样时:

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

相应的客户端脚本:

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

正确获取MyObject。

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

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

1 个答案:

答案 0 :(得分:1)

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