第一次尝试使用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