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 を渡そうとすると、常に 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(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 メディア タイプに対してのみ機能します。したがって、2 番目の方法 (自分に合った方法) は、JSON メッセージ エンティティを受信する正しい方法です。

于 2012-07-24T09:25:07.787 に答える