我想出了一种方法。我不确定它是最好的还是最简单的,但它确实有效。我找到了 Struts异常配置指南<package>
,并在里面添加了以下内容struts.xml
:
<global-results>
<result name="exception">/exception.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="exception" />
</global-exception-mappings>
这会导致所有未处理的异常被重定向到/exception.jsp
. 以下是 JSP 的内容:
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="application/json; charset=UTF-8" %>
<% response.setStatus(500); %>
{"success": false,"errors": "<s:property value="%{exception.message}"/>"}
您会在第 3 行注意到我手动将响应代码设置为 500。
这给了我一个新问题:不再记录异常。正如前面提到的 Struts 指南中所建议的,我也通过在我<package>
的 in 中添加以下内容来解决这个问题struts.xml
:
<interceptors>
<interceptor-stack name="appDefaultStack">
<interceptor-ref name="defaultStack">
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">ERROR</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="appDefaultStack" />
Struts:-1 用于使这样一个简单而明显的功能不是默认的,另一个-1 用于使解决方案如此迟钝。