私はそれを行う1つの方法を考え出しました。それが最良か最も簡単かはわかりませんが、機能します。Struts Exception Configurationガイド<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>
まし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は、ソリューションを非常に鈍感にするためのものです。