Spring Bootのレイヤ間でやりとりされるJava Beans (POJO)の呼び方.
ざっくり言えば以下の通りか.
PitCoin(拡張版)を例にとって説明してみる.
データベースのテーブルをそのままミラーリングしたJavaオブジェクト.
メンバにアノテーションしておくと,CRUDする際にあんじょう変換&検査してくれる.
@Data @Entity public class User { @Id String uid; //ユーザID @NotEmpty String name; //ユーザ氏名 @NotEmpty String password; //パスワード @NotEmpty String email; //Email boolean admin; //管理者かどうか boolean enabled; //有効かどうか @Temporal(TemporalType.TIMESTAMP) Date enabledAt; //有効になった日時 @Temporal(TemporalType.TIMESTAMP) Date disabledAt; //凍結された日時 String remark; //注釈 }
様々なEntityやFormから必要なデータを集めて詰め込んで,受け渡ししやすい形にしたオブジェクト.
業務ロジックに応じて作られる.FormもDTOの一種といってよいかもしれないがDTOはフォームに限らない.
//ユーザの口座照会用 DTO @Data public class UserAccountDTO { String uid; //ユーザID String name; //ユーザ氏名 int aid; //口座番号 int coin; //口座残高 List <Record> records; // 取引履歴 }
Viewから受け取るユーザの入力フォームを保持するJavaオブジェクト. @Controllerのメソッドの引数(@RequestBody)として受取り,バリデーション(@Validated)される.
一般的にメンバはすべてString.バリデーションのためのアノテーションが施される.
入力に特化したDTOとも考えられるが,数値変換する前の数字文字列や,暗号化前のパスワード等, ユーザの入力そのものを(エラー等に備えて)保持しておくために,FormとDTOは別で作ったほうが 良いらしい.
@Data public class UserForm { /* ユーザID は 最大16文字.英数字,アンダーバー,ハイフンのみ許す */ @Size(max = 16) @Pattern(regexp = "[0-9a-zA-Z_\\-]+") private String uid; /* 名前,パスワードは Null,空文字(""),空白のみでないことを検証*/ @NotBlank private String name; @NotBlank private String password; /* RFC2822に準拠したEmailアドレスかどうか検証する */ @Email private String email; }