日期:2014-05-18  浏览次数:20742 次

SpringMvc当中的请求参数注入获取方式是什么?
很好奇Spring是怎么去获取请求的参数的。

@RequestMapping("/req")
public void req(HttpServletRequest request,HttpServletResponse response,String id){
System.out.println(id);
}


我在Spring的上一层做了一个Filter然后传了个包装类给SpringMvc,尝试替换了getParameterMap、getParameter的内容,但是SpringMVC拿到的内容依旧是替换之前的。

request.getParameterMap()、request.getParameter();、request.getReader()都不是,求解。

我chain传入的实际上是请求的包装类,RequestWrapper里面我重写了几个Spring可能调用的方法:

public String getParameter(String name) {
String value = super.getParameter(name);
if(map!=null&&map.get(name)!=null){
value = (String)map.get(name);
}
return value;
}

/**
 * ParameterMap
 */
public Map<String, String[]> getParameterMap() {
Map<String, String[]> map = new HashMap<String, String[]>();
map.putAll(super.getParameterMap());
try {
List<String> ls = new ArrayList<String>();
for (String str : map.keySet()) {
String[] s = map.get(str);
for (String v : s) {
ls.add(new XssFilter().filter(v));
}
map.put(str, ls.toArray(new String[ls.size()]));
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}

request.getParameter("xxx") 和 request.getParameterMap() 都是正常的获取到替换后的参数。
但是SpringMvc自动注入的参数弄死都不对,有点没招了。现在想做的就是想办法让SpringMvc拿到替换后的参数,而不是未过滤之前的

------解决方案--------------------
先说一句你的想法还是不错的! 接下来我也研究研究去
------解决方案--------------------
是单例还是prototype?