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

时间:2012-04-05 07:24:38

标签: java spring-mvc

我在我的应用程序中使用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在那里没用,所以我需要一些方法来访问控制器本身的信息。)

1 个答案:

答案 0 :(得分:3)

由于你的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>

如评论中所述。