自定义CustomHttpServletRequestWrapper 和CustomHttpServletResponseWrapper


/**
* @author Ly
* @create 2020/8/17 17:51
* @desc
**/
@Slf4j
public class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper {

private final byte[] body;

public CustomHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
InputStream is = request.getInputStream();
new HttpServletRequestWrapper(request);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte buff[] = new byte[ 1024 ];
int read;
while( ( read = is.read( buff ) ) > 0 ) {
baos.write( buff, 0, read );
}
body = baos.toByteArray();

}

@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}

@Override
public ServletInputStream getInputStream() throws IOException {
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) {
}

};
}


public static String getBodyMap(ServletInputStream in) {
String param= "";
BufferedReader streamReader=null;
try {
streamReader = new BufferedReader( new InputStreamReader(in, "UTF-8"));
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null){
responseStrBuilder.append(inputStr);
}
return responseStrBuilder.toString();
} catch (Exception e) {
log.error("获取请求体参数失败:",e);
}finally{
if(streamReader!=null){
try {
streamReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
log.error("关闭流失败:",e);
}
}

}
return null;
}

public Map<String,String> getAllHeaders(){
Enumeration<String> headerNames = this.getHeaderNames();
Map<String,String> headerMaps = Maps.newHashMap();
while(headerNames.hasMoreElements()){
String names = headerNames.nextElement();
headerMaps.put(names,this.getHeader(names));
}
return headerMaps;
}


}
=======================================================================================================================================================


/**
* @author Ly
* @create 2020/8/24 15:52
* @desc
**/
public class CustomHttpServletResponseWrapper extends HttpServletResponseWrapper {

private CustomResponsePrintWriter writer;
private ByteArrayOutputStream output;

public CustomHttpServletResponseWrapper(HttpServletResponse httpServletResponse)
{
super(httpServletResponse);
output = new ByteArrayOutputStream();
writer = new CustomResponsePrintWriter(output);
}

@Override
public ServletOutputStream getOutputStream() throws IOException {
return new CustomServletOutputStream(output);
}

@Override
public void finalize() throws Throwable{
super.finalize();
output.close();
writer.close();
}

public String getContent() {
try{
return new String(this.getBytes(),"UTF-8");
}
catch(UnsupportedEncodingException e){
return "UnsupportedEncoding";
}
}

public byte[] getBytes(){
byte[] bytes = output.toByteArray();
if(null != writer) {
writer.close();
return bytes;
}

if(null != output) {
try {
output.flush();
} catch(IOException e) {
e.printStackTrace();
}
}
return bytes;
}

@Override
public PrintWriter getWriter() throws IOException{
return writer;
}

class CustomServletOutputStream extends ServletOutputStream {
private ByteArrayOutputStream ostream ;
public CustomServletOutputStream(ByteArrayOutputStream ostream) {
this.ostream = ostream;
}
@Override
public void write(int b) throws IOException {
// 将数据写到 stream 中
ostream.write(b);
}

@Override
public boolean isReady() {
return false;
}

@Override
public void setWriteListener(WriteListener writeListener) {

}
}

private class CustomResponsePrintWriter extends PrintWriter
{
ByteArrayOutputStream output;

public CustomResponsePrintWriter(ByteArrayOutputStream output){
super(output);
this.output = output;
}

public ByteArrayOutputStream getByteArrayOutputStream(){
return output;
}
}
}
原文地址:https://www.cnblogs.com/ymqj520/p/14047051.html