Получить полную строку заголовка HTTP Accept в рестлете?
Извиняюсь за вопрос новичка, но я изо всех сил пытаюсь получить из рестлета полное содержимое заголовка HTTP Accept, полученного из клиентского веб-браузера (v 2.3.5)?
Это:
this.request.getHeaders().getFirstValue("Accept",true);
Не работает, я только возвращаю */*.
Я также попробовал:
List<Preference<MediaType>> mediaTypes = this.request.getClientInfo().getAcceptedMediaTypes();
this.logger.debug(mediaTypes.toString());
for (Iterator it = mediaTypes.iterator();it.hasNext();) {
Preference<MediaType> preference = (Preference<MediaType>) it.next();
this.logger.debug(preference.toString());
}
Опять же, это возвращает только [*/*:1.0] и */*: 1.0 соответственно.
1 ответ
Решение
Фактически Restlet предоставляет объектное представление элементов, присутствующих в запросе. Учитывая Accept
заголовок, у вас есть следующие правила, основанные на MediaType
учебный класс:
- первый элемент типа носителя соответствует значению типа носителя (например:
application/json
...) - второй по качеству
Если вы хотите знать, соответствующее значение заголовка будет:
Accept: media-type-value;q=quality,media-type-value;q=quality,media-type-value;q=quality
Например, если вы получаете следующие значения, используя код getClientInfo().getAcceptedMediaTypes().toString()
:
[text/html:1.0, application/xhtml+xml:1.0, application/xml:0.9, image/webp:1.0, */*:0.8]
Соответствующий заголовок будет:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Надеюсь, это поможет тебе, Тьерри