https://blog.csdn.net/a582127421/article/details/78321888#commentBox
@Component
@Order(1)
@Slf4j
@WebFilter(filterName = "errorMsgFilter", urlPatterns = "/*")
public class ErrorMsgFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
ErrorMsgFilterResponseWrapper wrapper = new ErrorMsgFilterResponseWrapper(response);
filterChain.doFilter(servletRequest, wrapper);
String result = wrapper.getResponseData(response.getCharacterEncoding());
//...gono
}
class ErrorMsgFilterResponseWrapper extends HttpServletResponseWrapper {
private ByteArrayOutputStream buffer = null;
private ServletOutputStream out = null;
private PrintWriter writer = null;
public ErrorMsgFilterResponseWrapper(HttpServletResponse response) throws IOException{
super(response);
buffer = new ByteArrayOutputStream();
out = new WapperedOutputStream(buffer);
writer = new PrintWriter(new OutputStreamWriter(buffer, "UTF-8"));
}
@Override
public ServletOutputStream getOutputStream() throws IOException {
return out;
}
@Override
public PrintWriter getWriter() throws IOException {
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 String getResponseData(String charset) throws IOException {
flushBuffer();
byte[] bytes = buffer.toByteArray();
try {
return new String(bytes, charset);
} catch (UnsupportedEncodingException e) {
return "";
}
}
class WapperedOutputStream extends ServletOutputStream {
private ByteArrayOutputStream bos = null;
public WapperedOutputStream(ByteArrayOutputStream stream) throws IOException {
bos = stream;
}
@Override
public void write(int b) throws IOException {
bos.write(b);
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setWriteListener(WriteListener listener) {
}
}
}
本文介绍了一种通过自定义过滤器实现对HTTP响应内容进行拦截并处理错误消息的方法。该过滤器利用了Spring Boot框架的功能,并通过重写HttpServletResponse来捕获响应数据,实现了对错误信息的统一管理和格式化。
4933

被折叠的 条评论
为什么被折叠?



