例外が一般的なエラーページに送られるように、例外がコントローラからエスケープされると、UrlMappingsとErrorControllerを使ってGrailsで汎用例外処理を行う方法を知っています。記録される。 try/catchブロックを使用して特定の例外を処理し、それらから回復しようとする方法も知っています。Grailsコントローラでの例外処理
しかし、ほとんどのコントローラでは、例外が発生した場合、ユーザーに少しだけ具体的なエラーメッセージを表示したいだけです。したがって、作成アクションでは、アイテムが作成されていないことをユーザーに伝えたいと思います。または、インポートアクションでは、インポートが失敗したことをユーザーに伝えたいと思います。今、コントローラは以下のようになります。catchブロックが例外の種類や内容に基づいて異なる何もしないことを
class ThingController {
def create = {
try {
// The real controller code, which quickly hands it off to a service
} catch (Exception e) {
handleException(e, "There was an error while attempting to create the Thing")
}
}
def delete = {
try {
// The real controller code, which quickly hands it off to a service
} catch (Exception e) {
handleException(e, "There was an error while attempting to delete the Thing")
}
}
private void handleException(Exception e, String message) {
flash.message = message
String eMessage = ExceptionUtils.getRootCauseMessage(e)
log.error message(code: "sic.log.error.ExceptionOccurred", args: ["${eMessage}", "${e}"])
redirect(action:index)
}
}
注意を。彼らはちょうどコントローラに基づいて若干説明的なエラーメッセージを与えているだけです。 「実際の」コントローラコードは通常6〜10行であるため、エラーメッセージを変更するために追加の4行のコードを追加することは過度に思われます。さらに、CodeNarcの「CatchException」ルールが不満を表明しています。これは、これを行うためのよりよい方法が必要であるとの私の意見を強めています。私は他のGrailsアプリケーションも同様の要件を持っていると仮定します。 慣用句は、例外が発生したときのアクションに基づいて、異なるエラーメッセージを指定する方法は何ですか?
私は、この問題を解決する特別な方法を経験した回答、あるいは実際に解決策が見えるコードベースへのリンクに興味があります。
質問の変更が必要な理由、またはスタックオーバーフローに適切でない理由を説明してください。おかげで –