springMvc使用拦截器自定义处理参数

  这两天开发遇到一个需求,那就是在后台接收到请求后,能不能自定义添加参数呢?

  我们知道request中是能获取到前端获取的参数的,但是在后端不能再往parameter中添加参数了,虽然可以使用request.setAttribute()方法往request中存放数据,但是这些数据springmvc在解析request中的数据时是不会解析的;

  而且,如果我们想对前端传来的数据做处理这个方法也是无法实现的,我查看了一下网上的资料,并没有发现springmvc有预留这样的接口可以扩展,所以,我就考虑自己来处理一下它吧;

1,先找到springmvc是如何获取参数的

  首先,要找到springmvc是在哪获取参数的,于是我们通过debug模式查找一次请求中,参与处理的类有哪些,终于,我们找到了这样一个类:org.springframework.web.util.WebUtil,这个类中有这样一个方法:

 

public static Map<String, Object> getParametersStartingWith(ServletRequest request, @Nullable String prefix) { Assert.notNull(request, "Request must not be null"); Enumeration<String> paramNames = request.getParameterNames(); Map<String, Object> params = new TreeMap<>(); if (prefix == null) { prefix = ""; } while (paramNames != null && paramNames.hasMoreElements()) { String paramName = paramNames.nextElement(); if ("".equals(prefix) || paramName.startsWith(prefix)) { String unprefixed = paramName.substring(prefix.length()); String[] values = request.getParameterValues(paramName); if (values == null || values.length == 0) { // Do nothing, no values found at all. } else if (values.length > 1) { params.put(unprefixed, values); } else { params.put(unprefixed, values[0]); } } } return params; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjygx.html