private HttpServletRequest originalRequest;
Map params = originalRequest.getParameterMap();
params.remove("parameter-to-remove");
params.put("parameter-to-add", "<a value>");
现在原始请求中的参数会在这些操作后发生变化吗?或者它只是将值复制到params并且我对它们做什么并不重要,并且在originalRequest中不会改变它?
答案 0 :(得分:4)
返回的地图是不可变的地图,这可能是您没有看到反映的变化的原因。
根据getParameterMap javadoc
一个不可变的java.util.Map,包含作为键的参数名称和作为映射值的参数值。参数映射中的键是String类型。参数映射中的值的类型为String array。
如果您想设置一些值来请求,请使用setAttribute。
答案 1 :(得分:1)
不,您不能删除或添加任何请求参数到请求对象。它们必须保留(当它们到达服务器时),直到请求对象超出范围(在请求处理周期结束之后)。
逻辑上,如果您被允许做类似的事情,那么请求对象将不再代表原始请求。在整个请求处理周期中,我们希望处理客户端发送的请求,而不是已经被篡改的请求。
您应该使用的方法是void setAttribute(java.lang.String name, java.lang.Object o)
。