Как различить типы клиентов в методе отдыха? - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть служба отдыха jax-rs, для которой я написал клиент для Android.

Служба отдыха предоставляет методы для отчетов CRUD. Запрос http get возвращает список отчетов в структуре xml.

Теперь, если я получаю доступ к службе из браузера, я хочу, чтобы запрос http get возвращал html вместо xml.

Могу ли я перегрузить метод, чтобы он возвращал разные результаты для разных клиентов, или мне нужно реализовать отдельный метод отдыха для клиентов браузера?

Я также подумал об использовании одной и той же структуры xml для обоих и включении таблицы стилей xml для браузера, но я не могу понять, как поместить ссылку xslt в автоматически сгенерированный xml.

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

Хотя ответ Квентина является хорошим указателем в правильном направлении, он не специфичен для jax-rs.

Спецификация jax-rs определяет аннотацию @Produces в разделе 3.5 * 1005.*

Классы приложений могут объявлять поддерживаемые типы медиа запросов и ответов, используя аннотации @Consumes и 23 @Produces соответственно.Эти аннотации МОГУТ применяться к методу ресурса, классу ресурса 24 или к поставщику сущности (см. Раздел 4.2.3).Использование этих аннотаций в методе ресурса переопределяет 25 для любого класса ресурса или провайдера сущности для аргумента метода или возвращаемого типа.При отсутствии 26 из этих аннотаций предполагается поддержка любого типа носителя (« / »).

Тип mime, объявленный с помощью @Produces, автоматически сопоставляется с Заголовок HTTP-запроса на принятие запроса.Это означает, что для разграничения клиентских запросов вы можете определять методы ресурсов с различными объявлениями @Produces.

В моем случае мне понадобился метод, который возвращал xml, и метод, который возвращал html, поэтому я объявил два метода в ресурсе / отчетах:

@GET
@Produces({MediaType.TEXT_HTML})
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String getReportsAsHtml(){...}

И

@GET
@Produces({MediaType.APPLICATION_XML})
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public List<Report> getReportsAsXml() {...}

Пожалуйста, обратитесь к комментарию Квентина о настройках Accept Header для заключительной части головоломки

1 голос
/ 20 декабря 2011

Используйте заголовок HTTP Accept Request

0 голосов
/ 20 декабря 2011

Просто отправляйте его как XML все время и используйте таблицу стилей. В этом случае кажется, что таблица стилей может быть довольно примитивной, поэтому просто используйте CSS. Вот пример документа XML, который использует таблицу стилей CSS и где эта таблица стилей обратно совместима со старыми версиями IE.

http://mailmarkup.org/hcl/hcl1_0-documentation.xsd

Обратите внимание на дублирование в таблице стилей, чтобы избежать ненужного упоминания объявлений пространства имен. Так я смог добиться совместимости с IE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...