1

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

4

1 回答 1

4

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

如评论中所述。

于 2012-04-05T08:51:54.077 回答