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