Получить полную строку заголовка 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

Надеюсь, это поможет тебе, Тьерри

Другие вопросы по тегам