Java(Spring)初学者です。エラーキャッチ後のハンドリングについて質問です。
入力画面→確認画面→完了画面、と遷移する機能で
確認画面→完了画面の処理時に、入力内容を処理させる外部APIを叩き、正常時はそのまま完了画面に遷移しますが
エラー時は、Controllerのindexでformなど諸々定義された情報(下記Controller参照)を受け渡しつつ、入力画面に戻し、かつエラーメッセージも表示させたいです。
この場合、以下の実現方法を検討していますが、どうもしっくりきません。
①独自のExeptionを作成し、それをキャッチさせ、そのクラスの中で入力画面に戻すよう処理を組み込む。
→単に画面遷移だけであれば、ModelAndViewをnewしてsetViewNameで遷移先を指定すれば良いだけだが
form情報などControllerのindexメソッドでやっている処理ごと受け渡したい。その記述方法が不明。。
②formに新しくエラー表示用の項目を定義("error"とします)し、エラー時に以下を記述(下記error参照)し、バインドエラーとして処理させる。
→バリデーションチェックでもないのに、エラー表示用にしか使わない項目をformに定義して使うこと自体が間違っている気がします。
また、gaibuService.gaibuApi(bindingResult);の処理後、すぐにbindingResult.hasErrors()を再度実行しているのもセンスが無い気がします。。
そもそもこの①、②の検討案自体間違っているかもしれませんが、作法等も含め、何かアドバイスを頂けるとありがたいです。
Controller
1 /** 2 * 入力画面 3 **/ 4 @RequestMapping() 5 public ModelAndView index(@ModelAttribute Form form) { 6 7 List<TestDto> TestDtoList = CommonList.getTestDtoList(); 8 ModelAndView mav = new ModelAndView(); 9 mav.addObject("TestDtoList", TestDtoList); 10 // 検討案②の時、以下を実装し、index.htmlで出力させる 11 mav.addObject("error", error); 12 mav.setViewName("/index"); 13 return mav; 14 } 15 16 /** 17 * 完了画面 18 **/ 19 @RequestMapping(value = complete) 20 public ModelAndView complete(@Validated @ModelAttribute Form form, BindingResult bindingResult) throws Exception { 21 22 // Validation Check 23 if (bindingResult.hasErrors()) { 24 return index(form); 25 } 26 27 // 外部APIを叩く処理。 28 // 正常なら完了画面へ。エラー時はエラーメッセージと一緒に入力画面へ。 29 gaibuService.gaibuApi(bindingResult); 30 if (bindingResult.hasErrors()) { 31 return index(form); 32 } 33 34 ModelAndView mav = new ModelAndView(); 35 mav.setViewName("/complete"); 36 return mav; 37 }
error
1 // エラー(ここではエラーフラグが"1"ならエラーとします) 2 if(errorFlg.equals("1")) { 3 FieldError fieldError = new FieldError(bindingResult.getObjectName(), "error", "表示させたいエラーメッセージ"); 4 bindingResult.addError(fieldError); 5 return; 6 }
回答1件
あなたの回答
tips
プレビュー