Submit Search
Upload
Javaでのバリデーション 〜Bean Validation篇〜
•
7 likes
•
19,403 views
eiryu
Follow
2014/12/04 Validation Night at LINE株式会社
Read less
Read more
Technology
Report
Share
Report
Share
1 of 31
Download now
Download to read offline
Recommended
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Spring bootでweb バリデート編
Spring bootでweb バリデート編
なべ
例外設計における大罪
例外設計における大罪
Takuto Wada
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Toshiaki Maki
[part 2]ナレッジグラフ推論チャレンジ・Tech Live!
[part 2]ナレッジグラフ推論チャレンジ・Tech Live!
KnowledgeGraph
グラフ構造のデータモデルをPower BIで可視化してみた
グラフ構造のデータモデルをPower BIで可視化してみた
CData Software Japan
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
ssuser070fa9
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
Recommended
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Spring bootでweb バリデート編
Spring bootでweb バリデート編
なべ
例外設計における大罪
例外設計における大罪
Takuto Wada
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Toshiaki Maki
[part 2]ナレッジグラフ推論チャレンジ・Tech Live!
[part 2]ナレッジグラフ推論チャレンジ・Tech Live!
KnowledgeGraph
グラフ構造のデータモデルをPower BIで可視化してみた
グラフ構造のデータモデルをPower BIで可視化してみた
CData Software Japan
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
ssuser070fa9
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
ナレッジグラフ入門
ナレッジグラフ入門
KnowledgeGraph
日本語テストメソッドについて
日本語テストメソッドについて
kumake
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-
Masatoshi Tada
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
Masatoshi Tada
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
Introducing thymeleaf
Introducing thymeleaf
eiryu
Ninja framework使ってみた
Ninja framework使ってみた
eiryu
More Related Content
What's hot
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
ナレッジグラフ入門
ナレッジグラフ入門
KnowledgeGraph
日本語テストメソッドについて
日本語テストメソッドについて
kumake
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-
Masatoshi Tada
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
Masatoshi Tada
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
What's hot
(20)
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
イベント・ソーシングを知る
イベント・ソーシングを知る
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
ナレッジグラフ入門
ナレッジグラフ入門
日本語テストメソッドについて
日本語テストメソッドについて
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
More from eiryu
Introducing thymeleaf
Introducing thymeleaf
eiryu
Ninja framework使ってみた
Ninja framework使ってみた
eiryu
JMeter小話
JMeter小話
eiryu
Thymeleafのすすめ
Thymeleafのすすめ
eiryu
最近のJavaでの開発について
最近のJavaでの開発について
eiryu
Thymeleafでハマったこと
Thymeleafでハマったこと
eiryu
TwFavView
TwFavView
eiryu
Spring小話
Spring小話
eiryu
More from eiryu
(8)
Introducing thymeleaf
Introducing thymeleaf
Ninja framework使ってみた
Ninja framework使ってみた
JMeter小話
JMeter小話
Thymeleafのすすめ
Thymeleafのすすめ
最近のJavaでの開発について
最近のJavaでの開発について
Thymeleafでハマったこと
Thymeleafでハマったこと
TwFavView
TwFavView
Spring小話
Spring小話
Recently uploaded
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
Recently uploaded
(10)
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
Javaでのバリデーション 〜Bean Validation篇〜
1.
Javaでのバリデーション 〜Bean Validation篇〜 2014/12/04 Validation
Night at Line @eiryu
2.
なにをやっているのか ● Twitter @eiryu ○
http://eiryu.com ● 仕事 ○ インフラ・情シス ● バッググラウンド ○ Webアプリケーションエンジニア ■ Java ● Spring Framework ■ Groovy ■ JavaScript ■ PostgreSQL
3.
なにをやっているのか
4.
なぜやるのか ● 人間なのでヒューマンエラーは付きもの ● バリデーションされてなかったことによる壊れた ユーザーデータはマーケティングにも生かせな い ○
男性で妊娠している等 ● Webアプリケーションの場合、最悪ユーザー情 報が漏洩したり、操作されたりする
5.
どうやってやっているのか ● Bean Validationを利用 ●
Webアプリケーションのコントローラでユーザー 入力をチェック ● 単体テスト(JUnit)で想定しうる不正な入力のテ スト ※フレームワークはSpring Bootを利用
6.
こんなことやります Bean Validationで(ry
7.
以上、Wantedly四段活用でした!
8.
Bean Validationとは “JavaBeansのバリデーション(値の検証)のため のメタデータモデルとAPIを定めたJavaのソフト ウェアフレームワーク” Wikipedia http://beanvalidation.org/
9.
Bean Validationの沿革 2009 Bean
Validation 1.0(JSR 303) 2013 Bean Validation 1.1(JSR 349) JSRとは Java Specification Requestsの略。日本語だと、 Java仕様要望。個人的にはJava版のRFCと捉え ている。
10.
何がうれしいのか ● あらかじめよく使う制約(チェック)が用意されて いる ○ Constraintsと呼ぶ ●
ユーザーの入力を受け取るJavaBeans (POJO)にアノテーションで記載するため、 POJOに対してテストが書ける ○ コントローラのメソッド内でチェックしているとリクエストを エミュレートするテストを書かなければならない
11.
Constraintsの例 ● @NotNull ○ nullでないこと ●
@Pattern ○ 指定した正規表現にマッチすること ● @Size ○ 文字列等のサイズが指定した範囲であること ● @AssertTrue ○ trueであること ● @Future ○ JVMの現在日時より未来であること packageはjavax.validation.constraints
12.
ここで一般的なバリデーションの話に戻る と。。
13.
バリデーションの種類 ● 単項目チェック ● 相関チェック
14.
単項目チェック ● 1つの項目に対するチェック ● 例 ○
ユーザー登録で名前の入力は必須だが、入力されてい るか?
15.
相関チェック ● 2つ以上の項目にまたがるチェック ● 例 ○
性別で男性を選択しているのに、妊婦の項目にチェック していないか?
16.
コード例
17.
コード例 以下のようなフィールドを持つUserFormがあると する ● 名前(name) ● 性別(sex) ●
妊娠しているか(pregnant)
18.
コード例 単項目チェック @NotNull(message = "性別がぬるぽ") private
Sex sex;
19.
コード例 単項目チェック ● フィールドまたはそのgetterにConstraintsを付 与
20.
コード例 相関チェック @AssertTrue(message = "男性なのに妊娠してるって言ってる。。") public
boolean isValidPregnant() { // 性別が入力されていない時は、そちらで引っかかるのでバリデーショ ンしない if (sex == null) { return true; } // 妊娠していると選択している人が女性であることをチェック if (pregnant) { return Sex.FEMALE == sex; } return true; }
21.
コード例 相関チェック ● メソッドを定義してそこにアノテーションを付与 ● 個人的には@AssertTrueのみ利用すれば良い と思う ○
Bean ValidationのValidatorのお作法的に、isValidでバ リデーションOKならばtrueを返すようになっている。その 流れに沿った方が分かりやすい
22.
コード例 単体テスト (特定プロパティのみのバリデーション) private Validator validator
= Validation.buildDefaultValidatorFactory().getValidator(); @Test public void validateName_正常系() { UserForm userForm = new UserForm(); userForm.setName("eiryu"); Set<ConstraintViolation<UserForm>> violations = validator.validateProperty(userForm, "name"); LOGGER.info("violations: " + violations); assertThat(violations, hasSize(0)); }
23.
コード例 単体テスト (JavaBeans全体のバリデーション) private Validator validator
= Validation.buildDefaultValidatorFactory().getValidator(); @Test public void validate_正常系() { UserForm userForm = new UserForm(); userForm.setName("eiryu"); userForm.setSex(Sex.MALE); userForm.setPregnant(false); Set<ConstraintViolation<UserForm>> violations = validator.validate(userForm); LOGGER.info("violations: " + violations); assertThat(violations, hasSize(0)); }
24.
コード例 Webアプリケーション (Spring Bootのコントローラ) @RequestMapping("registor") public String
registor( @Valid UserForm userForm, BindingResult bindingResult) { if (bindingResult.hasErrors()) { LOGGER.warn("bindingResult: " + bindingResult); return "index"; } // some process.. return "redirect:/complete"; }
25.
気にすべきポイント・TIPS
26.
気にすべきポイント・TIPS (バリデーションの順番) ● 普通に使うと、バリデーションが行われる順番はラ ンダム ○ Webアプリケーションでメッセージを上部に列挙するよう な場合に注意 ○
相関チェックでは、関係するフィールドが単項目チェック 済みでないことに注意して実装する必要がある
27.
気にすべきポイント・TIPS (バリデーションの順番) ● Group、 Group
sequence という仕組みを使うとバ リデーションの順番を制御することが出来る ○ JSRのSpecの例では、バリデーションで非常に重い処 理があって、それは他のバリデーションがOKだった時の み実行する、というもの ○ 他に想定出来るのは、同時に2つ以上エラーになってい るのに1つずつエラーメッセージ出すとか?
28.
気にすべきポイント・TIPS (メッセージ) メッセージはプロパティファイルに外だし可能。ロケールごとの ファイルを用意すればi18n対応も可能 ● ValidationMessages.properties ● ValidationMessages_ja_JP.properties プロパティファイルのエンコーディングはISO-8859-1で作成す ること(昭和か!) ●
IDEの自動変換かnative2ascii(昭和か!)で頑張りましょう @NotNull(message = "{NotNull.sex}") private Sex sex;
29.
気にすべきポイント・TIPS (その他) ● JavaBeansの中にJavaBeansがあるような ケースでは、そのフィールドに対して@Validアノ テーションを付与すれば再帰的にバリデーショ ンされる public class
UserForm { ... @Valid private Address address; ... }
30.
ご清聴ありがとうございました
31.
参考文献 ● http://beanvalidation.org/ ● http://yamkazu.hatenablog. com/entry/20110206/1296985545
Download now