HttpHeaders getFirst()不区分大小写

时间:2018-09-07 14:17:13

标签: java spring http-headers resttemplate

我正在使用Spring的RestTemplate获取HTTP标头。

HTTP headers are case insensitive,但documentation for HttpHeaders似乎并不承认这一点。

快速测试表明事情按预期进行...

HttpHeaders headers = restTemplate.headForHeaders(url);
Long a = Long.parseLong(headers.getFirst("Content-Length"));
Long b = Long.parseLong(headers.getFirst("content-length"));
assert( a.equals(b) ); // passes

我可以确定该测试将在所有Spring配置下通过吗?

1 个答案:

答案 0 :(得分:3)

this commit明确声明HttpHeaders不区分大小写:

  

请注意,HttpHeaders通常以不区分大小写的方式对待标头名称。


旧答案

HttpHeaders只有一个公共构造函数及其主体:

public HttpHeaders() {
    this(new LinkedCaseInsensitiveMap<>(8, Locale.ENGLISH), false);
}

根据LinkedCaseInsensitiveMap docs

  

LinkedHashMap变体,以不区分大小写的方式存储字符串键,例如用于结果表中基于键的访问。

     

保留键的原始顺序和原始大小写,同时允许包含,获取和删除任何键情况下的呼叫

是的,它始终以不区分大小写的方式工作。

但是为什么不使用HttpHeaders#getContentLength()? :

// no need to convert String to long
long contentLength = httpHeaders.getContentLength();