package com.jzlife.nurse.config.mvc;
import java.io.*;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import com.jzlife.nurse.util.HttpHelper;
public class RequestWrapper extends HttpServletRequestWrapper {
private byte[] body;
private Map<String, String[]> params = new HashMap<String, String[]>();
public RequestWrapper(HttpServletRequest request) throws IOException {
super(request);
body = HttpHelper.getBodyString(request).getBytes(Charset.forName("UTF-8"));
this.params.putAll(request.getParameterMap());
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}
@Override
public ServletInputStream getInputStream() throws IOException {
// if(null!=body) {这里修改body
// String bd=new String(body);
// bd=bd.replaceAll("123", "8888");
// body=bd.getBytes();
// }
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
return new ServletInputStream() {
@Override
public int read() throws IOException {
return bais.read();
}
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
};
}
/**动态加对象parame的key
* 修改此方法主要是因为当RequestMapper中的参数为pojo类型时, 会通过此方法获取所有的请求参数并进行遍历,对pojo属性赋值
*
* @return
*/
// @Override
// public Enumeration<String> getParameterNames() {
// Enumeration<String> enumeration = super.getParameterNames();
// ArrayList<String> list = Collections.list(enumeration);
// // 当有token字段时动态的添加uid字段
// if (list.contains("createAccount")) {
// System.out.println("加了啊");
// return Collections.enumeration(list);
// } else {
// return super.getParameterNames();
// }
// }
/**
* 这里修改@RequestParam的值
*/
@Override
public String[] getParameterValues(String name) {
// if ("createAccount".equals(name)) {
// return new String[] {"8888"};
// }
return super.getParameterValues(name);
}
public void setParameter(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) });
}
}
}
}
spirngmvc拦截器,拦截处理body和表单值
最新推荐文章于 2022-03-13 16:50:15 发布