0

第一次尝试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";

}
4

3 回答 3

1

如果该行抛出异常,则意味着它永远不会返回,因此statusFlag仍具有其原始值,并且该方法的执行已停止。try - catch如果您想捕获异常并对其进行处理,则需要将其包围起来。

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

于 2013-07-31T02:13:44.643 回答
0

我看不到您的 switch 语句的目的,因为每种情况都做同样的事情。

但基本上你可以把你的网络服务调用放在一个 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
}
于 2013-07-31T02:12:41.283 回答
0

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

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

于 2013-07-31T02:12:44.077 回答