3

ジャージーの例は次のようになります。

public class ItemResource {

    @GET
    @Path("/items")
    @Produces({"text/xml", "application/json"})
    public List<Item> getItems() {
        List<Item> items = new ArrayList<Item>();

        Item item = new Item();
        item.setItemName("My Item Name!");
        items.add(item);

        return items;
    }
}

しかし、アイテムを分析するのに問題があり、JerseyがアイテムをXMLまたはJSONに変換する方法をどのように知っているか。構築されたHTMLまたはXMLの文字列を返すだけの非常に基本的な例を見てきました。これは私にとってより理にかなっていますが、次のステップがありません。サンプルを調べたところ、オブジェクトが次のタイプの注釈でマークされていたため、そのうちの1つ(json-from-jaxbサンプル)が際立っていました。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "flight"
})
@XmlRootElement(name = "flights")

この「翻訳」を段階的に説明するチュートリアル、またはPOJOを特定のmimeタイプとして出力するように翻訳する方法の説明を探しています。ありがとう!

4

1 に答える 1

10

ここでは2つのことが機能しています。まず、@Producesアノテーションのメディアタイプがコンテンツネゴシエーションで使用されます。クライアントによって送信されたAcceptヘッダーの値のメディアタイプは、@ Producesアノテーションのメディアタイプと比較され、最も適切なものが選択されます。あなたの例ではそれがtext/xmlであると仮定します。

応答本文を作成するとき、Jerseyは、Itemオブジェクトをtext/xmlに変換できるMessageBodyWriterを内部的に見つけようとします。通常、プログラマーはこれらの「マッパー」クラスを提供しますが、XMLおよびJSONの場合、Jerseyは便宜上MessageBodyReadersをすでに組み込んでいます。

そのため、魔法がかかっているように見えます。

1月

于 2010-04-30T18:05:19.793 に答える