如何从HttpServletResponse中获取错误信息

3

我的应用程序中有两个过滤器:

1)第一个过滤器会抛出异常,我调用response.sendError(UNAUTHORIZED.getStatusCode(), "My message");

2)第二个过滤器用于将请求和响应记录到数据库中。

我有一个名为"error_message"的列,我想在过滤器2中保存来自过滤器1的错误消息。我该如何在weblogic上实现这个功能?我有javax.servlet.http.HttpServletResponse对象,只能获取状态:response.getStatus()

使用Spring框架,我可以调用ServletRequestContext.current().getErrorMessage(),但当我使用weblogic时,它不起作用。


你有看过这篇帖子吗 - https://dev59.com/7U7Sa4cB1Zd3GeqP1THq ?? - Sachin
@Sachin 谢谢,是的。但是ServletContext没有getErrorMessage()函数。 - Patres
1个回答

0

不需要创建自定义的HttpServletResponseWrapper。您可以使用ContentCachingResponseWrapper,因为它提供了getContentAsByteArray()方法。

更多信息请参见 - 如何读取和复制HTTP servlet响应输出流内容以进行日志记录

public void doFilterInternal(HttpServletRequest servletRequest, HttpServletResponse servletResponse,
        FilterChain filterChain) throws IOException, ServletException {

    HttpServletRequest request = servletRequest;
    HttpServletResponse response = servletResponse;
    ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper(request);
    ContentCachingResponseWrapper responseWrapper =new ContentCachingResponseWrapper(response);
    try {
        super.doFilterInternal(requestWrapper, responseWrapper, filterChain);

    } finally {

        byte[] responseArray=responseWrapper.getContentAsByteArray();
        String responseStr=new String(responseArray,responseWrapper.getCharacterEncoding());
        System.out.println("string"+responseStr);       
        /*It is important to copy cached reponse body back to response stream
        to see response */
        responseWrapper.copyBodyToResponse();

    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接