第一次嘗試使用Java,請友好。我在Web Controller中有以下代碼,其中基於封閉的Switch-Case語句調用服務。
我面臨的問題是,如果服務調用引發異常,則此異常將顯示在JSP頁面上。基本上,代碼永遠不會到達線路:
在這種情況下的異常處理
if(!statusFlag)
{
model.addAttribute("statusFlag", statusFlag);
return "myJspPage"
}
我如何確保執行去上面的紋路,即使一個異常在Web服務調用拋出:
statusFlag = myWebService.getMeStatus();
我應該在try-catch塊中包含整個Switch語句?
段:
@Controller
public String mySpringController() throws Exception
{
//rest of the controller code
switch (condition)
{
case MAY :
statusFlag = myWebService.getMeStatus();
if(!statusFlag)
{
model.addAttribute("statusFlag", statusFlag);
return "myJspPage"
}
break;
case JUNE :
statusFlag = myWebService.getMeStatus();
if(!statusFlag)
{
model.addAttribute("statusFlag", statusFlag);
return "myJspPage"
}
break;
case JULY :
statusFlag = myWebService.getMeStatus();
if(!statusFlag)
{
model.addAttribute("statusFlag", statusFlag);
return "myJspPage"
}
break;
default:
//Do something by default.
}
return "myJspPage";
}
嗨jbx,@ExceptionHandler聽起來不錯。那麼只需在控制器中用這個註釋聲明一個常用的方法,並且在拋出異常的時候就會調用它? – breakingBad
是的,如果您需要不同的行爲,您甚至可以擁有多個行爲,具體取決於拋出哪個異常。不過,這是Spring特有的。如果你在Java中生鏽,你需要更多地瞭解錯誤處理的工作原理。在Java中,通過檢查錯誤代碼(如舊的C風格的代碼),不鼓勵錯誤檢測,因爲它具有各種缺點(錯誤處理變成可選的,錯誤處理與普通'積極'代碼混合,你必須深入挖掘進一步的信息,而異常攜帶所有的信息,它可以爲每個錯誤不同,等等。) – jbx
感謝您的迴應。你們現在肯定已經知道我是來自C背景的人。 – breakingBad