此方案中的异常处理

时间:2013-07-31 02:07:09

标签: java spring jsp exception servlets

第一次尝试使用Java,请善待。我在Web控制器中有以下代码,其中基于封闭的Switch-Case语句调用服务。
我面临的问题是,如果服务调用抛出异常,则此异常将显示在JSP页面上。基本上代码永远不会出现:

if(!statusFlag)
{
      model.addAttribute("statusFlag", statusFlag);
      return "myJspPage"
}

如果在以下位置的WebService调用中抛出异常,我如何确保执行转到上面的行:

statusFlag = myWebService.getMeStatus();

我应该将整个Switch语句包含在try-catch块中吗?

摘录:

@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";

}

3 个答案:

答案 0 :(得分:1)

如果该行抛出异常,则意味着它永远不会返回,因此statusFlag仍然具有其原始值,并且该方法的执行已停止。如果你想捕获异常并对它做些什么,你需要在try - catch中包围它。

我看到你正在使用Spring。在Spring Controllers中,您还可以拥有自己的特殊方法,这些方法在发生异常时被调用。使用@ExceptionHandler注释。

答案 1 :(得分:0)

我没有看到你的switch语句的目的,因为每个案例都做同样的事情。

但基本上你可以把你的webservice调用放在try-catch块中

try{
    webservice.call();
}
catch (Exception e){
   // handle the exception
}
finally{
  //anything in here will be executed regardless if an exception is caught or not
}

答案 2 :(得分:0)

您正在以C ++的方式编写Java,您将返回错误代码,然后检查它们以确定是否出现任何问题。此代码段存在许多问题,但异常显示的原因是您永远不会catch抛出异常。您应该将try-catch块放在哪里取决于异常的含义;如果它不是某个特定月份的特定内容,那么请将整个switch语句括起来以共享错误处理。

顺便说一句,您是否复制并粘贴了实际代码,或者您是否尝试重新键入示例?那些case块看起来都一样。