home wiki.fukuchiharuki.me
Menu

  • 追加された行はこの色です。
  • 削除された行はこの色です。
#author("2017-05-29T01:22:41+00:00","default:haruki","haruki")
[[Spring Boot/相関項目チェックする]]
#author("2017-05-29T01:31:52+00:00","default:haruki","haruki")
* キーワード [#hb8e67b5]
- Spring Boot
- 入力チェック

* したいこと [#nea49007]

データベース上のデータと突き合わせてテストしたい。

* どうやって [#a0da48cc]

- アプリケーションサービスとして実装する

のがいいんじゃないかと思う。

 @Service
 public class UserPasswordCheck {
 
 	@Transactional(readOnly=true)
 	public void checkCurrentPassword(
 			BindingResult result, 
 			String field, 
 			Password currentPassword, 
 			User user
 	) {
 		if (result.hasFieldErrors(field)) return;
 		boolean isPass = user.getEncryptedPassword().isSame(currentPassword);
 		if (! isPass) result.rejectValue(field, メッセージキー);
 	}
 
 }

Controller側では次のようにする想定。

 // result: ハンドラの引数にするBindingResult
 // "currentPassword": 項目名
 // newPassword: 入力の値
 // user: ログインユーザー
 userPasswordCheck.checkCurrentPassword(result, "currentPassword", newPassword, user)
 if (result.hasErrors()) return 入力ページのテンプレート;

* ノート [#q9c3e643]

Service側でresult.hasFieldErrors(field)するのは、
- 単項目チェックと相関項目チェックをパスした場合だけチェックしたいから

if (result.hasErros())の前にServiceを呼ぶのは、
- 突合チェックと他の項目の単項目チェックと相関項目チェックを併せてしたいから

* 参考 [#o6f27385]
- [[Spring Boot/相関項目チェックする]]