0

Javaは初めてなのでよろしくお願いします。同封の Switch-Case ステートメントに基づいてサービスが呼び出される Web コントローラーに次のコードがあります。
私が直面している問題は、サービス呼び出しが例外をスローすると、この例外が 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例外をキャッチして何かをしたい場合は、それを a で囲む必要があります。

Springを使っているようです。Spring Controller では、例外が発生したときに呼び出される独自の特別なメソッドを持つこともできます。@ExceptionHandler注釈の使用。

于 2013-07-31T02:13:44.643 に答える
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
}
于 2013-07-31T02:12:41.283 に答える
0

C++ のスタイルで Java を記述し、エラー コードを返し、それらをチェックして問題が発生したかどうかを判断します。このスニペットには多くの問題がありますが、例外が表示される理由は、catchスローされている例外を決して知らないからです。ブロックを配置する場所はtry-catch、例外の意味によって異なります。特定の月に固有のものではない場合は、はい、switchエラー処理を共有するためにステートメント全体を囲みます。

余談ですが、実際のコードをコピーして貼り付けましたか、それとも例を再入力しようとしましたか? これらのcaseブロックはすべて同一に見えます。

于 2013-07-31T02:12:44.077 に答える