Tomcat中jakarta.servlet.ServletRequest#getParameterMap是否包含null键或值?
在Tomcat环境中,jakarta.servlet.ServletRequest#getParameterMap是否允许包含null键或null值?
直接给结论:Tomcat返回的这个参数Map里,既不会有null键,也不会有null值,实际行为比你贴的文档描述更明确:
- null键的情况:HTTP请求里的参数名本质是字符串,哪怕客户端传了空的参数名(比如
?=&foo=bar),Tomcat也会把空字符串""作为键存入Map,不会出现null键。 - null值的情况:每个键对应的都是String数组,哪怕参数没有具体值(比如
?foo),数组里的元素也是空字符串""而非null;就算参数重复且其中某个是空值(比如?foo=1&foo=),数组里的元素也都是非null的字符串(要么是实际值,要么是空字符串)。
原因很简单,Tomcat的参数解析逻辑严格贴合HTTP规范——HTTP请求里的参数名和值都是字符串类型,不存在Java里"null"的概念,空的参数名/值都会被解析成空字符串,不会映射为null。
你提到的模糊文档原文如下:
返回此请求参数的java.util.Map对象。
请求参数是随请求发送的额外信息。对于HTTP Servlet而言,参数包含在查询字符串或提交的表单数据中。
返回值:一个不可变的java.util.Map,其中参数名称作为键,参数值作为映射值。参数映射中的键为String类型,值为String数组类型。
内容的提问来源于stack exchange,提问作者user871611
相关产品推荐
相关产品推荐

