cloud.agileframework.spring.util.ResponseWrapper Maven / Gradle / Ivy
package cloud.agileframework.spring.util;
import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
/**
* @author 佟盟
* 日期 2020/8/00017 14:56
* 描述 响应包装
* @version 1.0
* @since 1.0
*/
public class ResponseWrapper extends HttpServletResponseWrapper {
private final ByteArrayOutputStream buffer;
private final ServletOutputStream out;
private final PrintWriter writer;
public ResponseWrapper(HttpServletResponse resp) throws IOException {
super(resp);
buffer = new ByteArrayOutputStream();
out = new WrapperOutputStream(buffer);
writer = new PrintWriter(new OutputStreamWriter(buffer, this.getCharacterEncoding()));
}
public static HttpServletResponse of(HttpServletResponse response) throws IOException {
if (!(response instanceof ResponseWrapper)) {
response = new ResponseWrapper(response);
}
return response;
}
@Override
public ServletOutputStream getOutputStream() {
return out;
}
@Override
public PrintWriter getWriter() {
return writer;
}
@Override
public void flushBuffer() throws IOException {
if (out != null) {
out.flush();
}
if (writer != null) {
writer.flush();
}
}
@Override
public void reset() {
buffer.reset();
}
public byte[] getResponseData() throws IOException {
flushBuffer();
return buffer.toByteArray();
}
private static class WrapperOutputStream extends ServletOutputStream {
private final ByteArrayOutputStream bos;
public WrapperOutputStream(ByteArrayOutputStream stream) {
bos = stream;
}
@Override
public void write(int b) {
bos.write(b);
}
@Override
public void write(byte[] b) {
bos.write(b, 0, b.length);
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setWriteListener(WriteListener writeListener) {
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy