第一次尝试使用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";
}
答案 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
块看起来都一样。