当前位置: 首页 > 知识库问答 >
问题:

如何在spring MVC错误处理程序中打印堆栈跟踪

狄新立
2023-03-14

我正在应用程序中使用spring SimpleMappingExceptionResolver

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
   <property name="exceptionMappings">
      <map>
         <entry key="Exception" value="error.htm"/>
      </map>
    </property>
    <property name="defaultErrorView" value="error.htm" />
</bean>

我的错误处理程序也很简单

@Controller
@RequestMapping("error.htm")
public class ErrorController {


    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView getErrorReport(HttpServletRequest request) {

        return new ModelAndView("/WEB-INF/jsp/error.jsp"); 
        }
    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView getErrorPostReport(HttpServletRequest request,HttpServletResponse response) {
        TreeMap<String,Object> map=new TreeMap<String,Object>();
        map.put("isDataChange", true);
        map.put("isBigError", true);
        return new ModelAndView(JSONView.RenderObject(map, response));
        }

}

如何打印异常消息和异常堆栈跟踪(或电子邮件)在我的错误控制器?

提前致谢

更新

谢谢你的回复。我想在jsp和控制台中打印堆栈跟踪。我还想要访问ErrorController本身中对象,这样我就可以使用这些信息来发送日志(由于一些调用是基于ajax的(它们使用POST),Error.jsp在那里没有用,所以我需要一些方法来访问controller本身中的这些信息)。

共有1个答案

莫英卓
2023-03-14

由于getErrorReport方法除了返回jsp页面之外什么也不做,所以可以在bean声明中返回它:

<property name="defaultErrorView" value="/WEB-INF/jsp/error.jsp" />

并且在页面中可以访问exception模型对象

<c:forEach items="${exception.stackTrace}" var="element">
    <c:out value="${element}">
</c:forEach>

如评论中所述。

 类似资料:
  • 我使用以下代码打印try-catch块中发生的任何异常,但是当异常发生时,logback不会打印完整的堆栈跟踪,而是写入一行错误(它没有明确说明是什么导致了它。我如何在logback输出中打印完整的堆栈跟踪? 尝试捕获异常的catch块 日志返回错误输出:

  • 问题内容: 如何将异常的堆栈跟踪信息打印到stderr以外的流上?我发现的一种方法是使用getStackTrace()并将整个列表打印到流中。 问题答案: 可以接受or或参数: 也就是说,请考虑将SLF4J之类的记录器接口与LOGBack或log4j之类的记录实现一起使用。

  • 如何将堆栈跟踪打印到logcat? 当应用程序在Eclipse中运行并且应用程序崩溃时,我会在logcat窗口中收到一系列消息,如“致命异常:main”,并打印堆栈跟踪。但是,当我从命令行使用adb logcat命令时,我没有看到任何这些消息?我看到的只是一条信息,上面写着一个例子。应用程序已经死了。 如何使用adb logcat命令获得Eclipse logcat窗口中显示的相同堆栈跟踪? 编辑

  • 当使用try/catch块时,我们可以使用e打印catch块中的堆栈跟踪。printStacktrace()方法。 如果出现未处理的异常,仍会打印堆栈跟踪。 谁在控制台上打印堆栈跟踪?怎么做?

  • 问题内容: 在Java中,如果一个方法抛出错误,则调用它的方法可以将其传递给下一个方法。 我正在迅速编写一个应用程序,并且希望做同样的事情。这可能吗?如果不可能,还有哪些其他可能的解决方案?我进行调用的原始函数具有此结构。 问题答案: 参考Swift- 错误处理文档 ,您应该: 1- 通过声明符合错误协议的 枚举 来创建自定义错误类型: 2- 声明为可抛出函数: 3- 声明为throwable函数

  • 我想按相反的顺序打印stackx,怎么做?谢谢你..