在restlet中获取完整的HTTP Accept标头字符串?

时间:2015-12-14 13:23:24

标签: java restlet-2.0

为新手问题道歉,但我正在努力获取从客户端Web浏览器接收的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 个答案:

答案 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

希望它可以帮到你, 亨利