📘
@ControllerAdviceによる例外処理、input処理の設定
概要
@ControllerAdviceアノテーションを使うことで例外発生時の処理やRequestParamなどでのデータバインドの設定を行うことができる。
ソースコード
コントローラーアドバイス
SampleControllerAdvice.java
@ControllerAdvice
public class SampleControllerAdvice {
/**
* NullPointerException発生時の処理
* @param exception
* @param model
* @return
*/
@ExceptionHandler(NullPointerException.class)
public String nullError(NullPointerException exception, Model model) {
model.addAttribute("errMsg", exception.getMessage());
return "index_null";
}
/**
* RequestParamやPathVariableの設定
* StringTrimmerEditorで空白をnullに設定する
* @param binder
*/
@InitBinder
public void initBinder(WebDataBinder binder) {
// 未入力のStringをnullに設定する
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
}
コントローラー
SampleController.java
@Controller
public class SampleController {
@GetMapping(value="/")
public String index(Model model) {
return "index";
}
/**
*
* @return
*/
@PostMapping("/nullPointerException")
public String nullPointerExceptionCtl(@RequestParam(required = false) String name){
throw new NullPointerException("NullPointerException:" + name);
}
}
ビュー
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>サンプルタイトル</h1>
<form method="post" th:action="@{/nullPointerException}">
<input type="text" id="name" name="name">
<button type="submit">NullPointerException</button>
</form>
</body>
</html>
index_null.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p th:text="${errMsg}"></p>
</body>
</html>
git
Discussion