问题描述:
最近项目过程中遇到一个问题,就是请求接收后,需要在传递request请求的时候,给里面自定义的封装一些信息,并且做一些操作之后再传递。
解决方法:
1、首先尝试后台如下写法
request.setAttribute("key","value");
结果在controller层写了之后,将request传递到service层发现使用request.getparameter("key")后无法得到想要拿到的数据。
所以经过百度,得知request的请求信心一般从客户端发送过来之后都是不被允许修改的,但是如果想要修改有如下方法:
首先,建立一个转换工具类,继承 HttpServletRequestWrapper类,这个类实现了HttpServletRequest请求。
该类如下:
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map<String, String[]> params = new HashMap<>();
public ParameterRequestWrapper(HttpServletRequest request) {
super(request);
this.params.putAll(request.getParameterMap());
}
public ParameterRequestWrapper(HttpServletRequest request, Map<String, Object> extendParams) {
this(request);
addAllParameters(extendParams);
}
@Override
public Map<String, String[]> getParameterMap() {
return params;
}
private void addAllParameters(Map<String, Object> otherParams) {
for (Map.Entry<String, Object> entry : otherParams.entrySet()) {
addParameter(entry.getKey(), entry.getValue());
}
}
private void addParameter(String name, Object value) {
if (value != null) {
if (value instanceof String[]) {
params.put(name, (String[]) value);
} else if (value instanceof String) {
params.put(name, new String[]{(String) value});
} else {
params.put(name, new String[]{String.valueOf(value)});
}
}
}
}
这样就可以对request里的信息进行自定义加工修改!