2

JAX-RS および JAXB アノテーションを使用して、POJO を JSON に正常にマーシャリングしています。

問題は、リクエストのマーシャリングを解除するために同じものを使用しようとすると、機能しないことです。ドキュメントで確認できる限り、JAX-RS は application/json 文字列を自動的にマーシャリングおよびアンマーシャリングして Java クラスに戻すことができます。

そのために独自の MessageBodyReader を作成する必要がありますか、またはこれは Jackson ライブラリを使用せずにフレームワークでサポートされていますか?

4

3 に答える 3

3

RESTEasyで成功しています。XML と JSON の両方を使用して生成するように設定しました。リクエスト ハンドラは次のとおりです。

@POST
@Produces(["application/json","application/xml"])
@Consumes(["application/json","application/xml"])
@Path("/create")
public Response postCreate(
         ReqData reqData) {
   log.debug("data.name is "+ data.getName());
   ...
   return Response.status(Response.Status.CREATED)
     .entity(whatever)
     .location(whateverURI)
     .build();

}

ReqData は JavaBean です。つまり、デフォルトのコンストラクターがあり、マーシャラーが検出するセッターとゲッターがあります。ReqData には特別な JSON タグはありませんが、XML マーシャラーの先頭に @XmlRootElement(name="data") があり、セッターに @XmlElement タグがあります。

入力用と出力用に別々の Bean を使用していますが、私が知る限り、同じ Bean を使用できます。

クライアント プログラムは、リクエストのエンティティ ボディで JSON 文字列を送信し、Context-Type ヘッダーと Accept ヘッダーの両方を「application/json」に設定します。

于 2009-12-21T16:07:08.700 に答える
0

私は Apache Wink を使用しており、そのために Jettison などの JSON プロバイダーを使用する必要がありました (同僚は Jackson を使用しています)。私が行った手順をここに書きました

私の推測では、あなたも JSON プロバイダーを使用する必要があるでしょう。Jackson プロバイダーを使用しない理由はありますか?

于 2009-12-21T06:57:04.043 に答える