Помимо аннотации @Produces, как Джерси (JAX-RS) узнает, как обращаться с POJO как с определенным типом пантомимы? - PullRequest
3 голосов
/ 30 апреля 2010

Я вижу много примеров для Джерси, которые выглядят примерно так:

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;
    }
}

Но тогда у меня возникают проблемы с анализом Item, и как Джерси знает, как перевести Item в XML или JSON. Я видел очень простые примеры, которые просто возвращают строку сконструированного HTML или XML, что имеет больше смысла для меня, но я пропускаю следующий шаг. Я посмотрел на образцы, и один из них выделился (образец json-from-jaxb), поскольку объект был помечен аннотациями следующих типов:

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

Я ищу учебники, в которых пошагово описан этот «перевод», или объяснение того, как преобразовать POJO для вывода в виде определенного типа MIME. Спасибо!

1 Ответ

10 голосов
/ 30 апреля 2010

Здесь работают две вещи. Во-первых, типы мультимедиа в аннотации @Produces используются при согласовании контента. Типы мультимедиа в значении заголовка Accept, отправленного клиентом, сравниваются с типами в аннотации @Produces, и выбирается наиболее подходящий. Предположим, это text / xml в вашем примере.

При создании тела ответа Джерси пытается найти MessageBodyWriter, который может превратить объекты Item в text / xml. Обычно программист предоставляет эти классы 'mapper', но для XML и JSON Джерси уже встроил MessageBodyReaders уже для удобства.

Вот почему кажется, что происходит какое-то волшебство.

Jan

...