グローバルデフォルト例外ハンドラを作成しました。このグローバルキャッチをコントローラで使用したいと思います。コントローラスプリングの例外ハンドラ
@ControllerAdvice
class GlobalDefaultExceptionHandler {
public static final String DEFAULT_ERROR_VIEW = "error";
@ResponseStatus(value= HttpStatus.CONFLICT,
reason="Data integrity violation")
@ExceptionHandler(DataIntegrityViolationException.class)
public void dataIntegrityViolationException() {
//do nothing, because I want just catch it
//and make use of it in controller.
}
}
これは私がこのエラーを利用したいコントローラメソッドです。
@PostMapping("/add")
public String addTask(@Valid BasicForm basicForm, BindingResult result, RedirectAttributes redirectAttrs) {
if (result.hasErrors()) {
redirectAttrs.addFlashAttribute("org.springframework.validation.BindingResult.basicForm", result);
redirectAttrs.addFlashAttribute("basicForm", basicForm);
return "user-add-page";
}
taskService.add(basicForm);
redirectAttrs.addAttribute("id", basicForm.getId());
return "redirect:/user/{id}";
}
そして最後に、私はこのようなものだろう:私はこのことについて多くのことをreaded、しかし真剣に、それはそれをこの方法を利用することも可能ですので、いくつかを共有してください場合は何の手掛かりを得なかっ
if (result.hasErrors() || dataIntegrityViolationException()) {
を知識:
これは動作しません。コントローラのアドバイスはコントローラを(基本的に)包み込み、例外を処理します。コントローラはコントローラに戻されません。 –
あなたは私の問題をどのように解決することができますか? ExceptionHandlerはどこに置くべきですか? – degath
コントローラーのアドバイスが自動的に適用されます... –