#author("2020-07-06T06:05:58+00:00","","")
#author("2021-06-24T05:45:20+00:00","","")
[[第2回]]

&color(red){&size(20){TODO この内容は2020年のものです。2021年の宿題ではありません};};

* ToDo管理Webアプリケーションの宿題 [#e14b6419]

** 課題説明 [#o8ae1f74]
第2回の講義では,ユーザ管理に関する基本的なコーディングを行った.
しかしながら,現状の実装は例外処理などを一切行っておらず,このままでは実用に耐えるWebアプリケーションとはならない.

そこで,次回講義においてToDo管理Webアプリケーションを完成させるために,宿題としてこの例外処理について自己学習し,
今回作成したユーザ管理部分について例外処理を実装する.

** 基礎知識 [#jcf0a995]

- SpringBootにおける例外処理の基礎的な考え方は[[SpringBoot/例外処理]]に記載されている.
- また,例外処理と密接な関係になる各種データに対するチェックとして
実装されているValidationについては[[SpringBoot/バリデーション]]に記載されている.

** 例外実装の例 HelloException [#vd8b045e]
- [[SpringBoot/例外処理]],またMedicalCheckApplicationは,例外のハンドリングについて高度な利用例となっており初学者にはなかなか理解が難しい.そこで,簡単な例外処理の実装例と説明を行う.
*** 構成 [#xf064eef]
-- 概要
--- WebアプリケーションアーキテクチャとしてViewとContollerのみ存在
--- index.htmlから全ての例外を発生させることが出来る
-- プロジェクトファイル:https://github.com/KobeSpiral2020/HelloException
-- Controller: HelloExceptionController.java
--- コントローラ
--- @GetMapping("/occurNullPointerException"):呼び出すとruntime exception (NullPointerException)を発生させる
--- @GetMapping("/occurFileNotFoundException"):呼び出すと検査例外(FileNotFoundException)を発生させる
--- @GetMapping("/occurOtherException"):呼び出すと検査例外(IOException)を発生させる
--- @GetMapping("/helloException"):呼び出すと runtime exceptionの自作例外(HelloExceptionException)を発生させる
--- @PostMapping("/person"):入力フォームから uid, nameを受け取りValidationを行う

-- ControllerAdvice: HelloExceptionControllerAdvice.java
--- 例外処理ハンドラー @ControllerAdviceを付与
--- @ExceptionHandler(NullPointerException.class):NullPointerException発生時の処理
--- @ExceptionHandler(FileNotFoundException.class):FileNotFoundException発生時の処理
--- @ExceptionHandler(HelloExceptionException.class):HelloExceptionException発生時の処理
--- @ExceptionHandler(Exception.class):発生時処理未定義例外の処理
--- @ExceptionHandler(BindException.class):BindException(@Validated 規約違反で発生)発生時の処理

-- Exception: HelloExceptionException.java
--- 自作例外, RuntimeException

-- Form: PersonForm.java
--- 入力フォーム用データ. uid, nameをメンバに持つ.それぞれValidate用のアノテーション付き

-- html類
--- static: index.html, inputform.html
--- templates: 各種エラー処理画面等

*** 実装解説 [#c7d29090]
- 例外を発生させるendpointを複数個作成し,定義済みの実行時例外(非検査例外),検査例外を発生させ,それぞれに応じたエラー画面を出す
-- 例外:NullPointerException, FileNotFoundException
-- 出力:error_null, error_no_file
- 例外ハンドラーに未定義の例外を発生させる
-- IOException
-- error
- 処理未定義の例外(ハンドラーに個別の例外として列挙していないもの)
-- 例外:Exception
-- 出力:error
- 自作例外を発生させる
-- 例外:HelloExceptionException
-- 出力:error_hello
- FormのValidationで発生したエラーの処理
-- 例外:BindException
-- 出力:error_input

** 【宿題】ユーザ登録の例外処理 [#seee5dab]
*** 対処すべき例外 [#aa546822]
- ToDo管理Webアプリケーションのユーザ管理における考えるべき例外(エラー)例を挙げる
-- uid, nammeに許可されていない文字を使用した
--- Validateで処理
-- uidが既に登録されているものと重複している
--- serviceで処理
- 他にも必要に応じ,例外処理を追加

*** エラー処理結果等 [#x479886c]
- 登録失敗画面,エラー発生画面などを作成

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS