问题描述:
前端发起的get请求,传参时参数带有+,后端接收时自动转译变成了空格,由于接口太多,不方便一个一个处理,所以怎么一次性修改所有的接口的传参呢?
解决方案:
一、启动类添加
@ServletComponentScan(basePackages = "kr.wms")
二、在任意一个路径下,使用过滤器,重写doFilter接口,实现参数的全局更改
package kr.wms.domain.common.utils;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;
import java.util.*;
@WebFilter
public class AuthHeaderSettingFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper((HttpServletRequest) request) {
/**
* 当调用request.getHeader("token")时,则获取请求参数中token值并当做Header的值返回
* @param name
* @return
*/
@Override
public String getHeader(String name) {
// 先从原本的Request中获取头,如果为空且名字为token,则从参数中查找并返回
String superHeader = super.getHeader(name);
if("token".equals(name) && StringUtils.isEmpty(superHeader)){
String token = request.getParameter("token");
if (StringUtils.isNotEmpty(token)) {
return token ;
}
}
return superHeader;
}
@Override
public String getParameter(String name) {
if("materialCode".equals(name)){
return super.getParameter(name)==null||"".equals(super.getParameter(name))?null:super.getParameter(name).replace("%2B", "").replace(" ", "");
}
return super.getParameter(name);
}
@Override
public Map<String, String[]> getParameterMap() {
HashMap<String, String[]> newMap = new HashMap<>();
newMap.putAll(super.getParameterMap());
Map<String, String[]> parameterMap = super.getParameterMap();
if (parameterMap!=null&&!parameterMap.isEmpty()){
if (parameterMap.get("materialCode")!=null&&(Arrays.toString(parameterMap.get("materialCode")).contains("%2B")|| Arrays.toString(parameterMap.get("materialCode")).contains(" "))){
String replace = Arrays.toString(parameterMap.get("materialCode")).replace("%2B", "").replace(" ", "").replace("[","").replace("]","");
newMap.put("materialCode",new String[]{replace}) ;
}
}
//在这里处理就行
// newMap.put("newParam",new String[]{"这是我新增加的参数"}) ;
return Collections.unmodifiableMap(newMap);
}
@Override
public String[] getParameterValues(String name) {
if("materialCode".equals(name)){
return new String[]{Arrays.toString(super.getParameterValues(name)).replace("%2B", "").replace(" ", "").replace("[","").replace("]","")};
}
return super.getParameterValues(name);
}
};
chain.doFilter(requestWrapper,response);
}
@Override
public void destroy() {
}
}