我正在使用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配置下通过吗?
答案 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();