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

Getting the full HTTP Accept header string in restlet?

对于这个新手问题,我深表歉意,但我正在努力寻找一种方法来从 restlet (v 2.3.5) 中获取从客户端 Web 浏览器接收到的 HTTP Accept header 的全部内容?

这个:

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());
    }

同样,这仅 returns [*/*:1.0] 和 */*:1.0 分别。

事实上,Restlet 提供了请求中存在的元素的 object 表示。关于 Accept header,你有以下基于 MediaType class 的规则:

  • 媒体类型的第一个元素对应媒体类型的值(例如:application/json, ...)
  • 第二个给质量 值

如果想知道header对应的值是:

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]

对应的header为:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

希望对你有帮助, 蒂埃里