package com.xxx.request;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* @author coco
* @date 2022/3/24
*/
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
private final String body;
public MyHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
InputStream is = null;
StringBuilder sb = null;
try {
is = request.getInputStream();
sb = new StringBuilder();
byte[] b = new byte[4096];
for (int n ; (n = is.read(b)) != -1;)
{
sb.append(new String(b, 0, n));
}
} finally {
if(is != null) {
is.close();
}
}
body = sb.toString();
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream bais = new ByteArrayInputStream(body.getBytes());
return new ServletInputStream() {
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
@Override
public int read() throws IOException {
return bais.read();
}
@Override
public void close() throws IOException {
bais.close();
}
};
}
public String getBody() {
return body;
}
}
继承HttpServletRequestWrapper自定义,重复消费请求参数
最新推荐文章于 2025-03-05 22:10:59 发布