Почему мой веб-сервис выдает результат XML для большинства мобильных браузеров вместо результата HTML? - PullRequest
1 голос
/ 16 января 2012

У меня есть спокойный ресурс веб-службы, для которого я определил методы XML и HTML.Для настольных браузеров сервис точно генерирует HTML, а для клиента Android, который я написал, он точно производит XML.

Однако, когда дело доходит до мобильных браузеров, сервис генерирует XML, где он должен генерировать HTML.

Один метод помечается

@Produces({MediaType.TEXT_HTML})

, а другой -

@Produces({MediaType.APPLICATION_XML})

Нужно ли смотреть больше, чем заголовок Accept, чтобы получить желаемый результат?

Обновление : допустимые типы мультимедиа, перехваченные из запроса мобильного браузера, являются:

ИНФОРМАЦИЯ: application / xml

ИНФОРМАЦИЯ: application / xhtml + xml

ИНФО: image / png

ИНФОРМАЦИЯ: текст / html;q = 0,9

INFO: текст / обычный текст;q = 0,8

ИНФОРМАЦИЯ: / ;д = 0,5

1 Ответ

2 голосов
/ 16 января 2012

В этом посте объясняется, как браузеры, основанные на webkit (большинство мобильных браузеров), и, по-видимому, также IE, используют заголовки принятия, которые отдают приоритет XML над HTML.Исходя из этого и этого SO вопроса, кажется, лучше не полагаться исключительно на заголовок accept запроса, а вместо этого комбинировать его с представлением, указанным в URL.

Другое решение состоит в том, чтобыпереопределите предпочтение клиента Accept, добавив атрибут качества в объявление @Produces.Если вы сделаете qs больше 1:

@Produces({MediaType.TEXT_HTML+";qs=1.1"})

, настройки клиентов браузера будут переопределены.Затем вам придется увеличить значение qs для других типов контента на стороне клиента для клиентов, которым это требуется.Я не знаю, является ли этот подход хорошей практикой, но это то, с чем я пошел.

...