実現したいこと
現在kotlin + Spring bootで個人開発をしており、ログイン機能を作成するにあたってそのapiのリクエストモデルの作成で一点ご相談があります。
apiのリクエストモデルにcreateUserRequest
とloginRequest
があり、両方とも共通したコンストラクタ引数にvalidation付きのuserName
とpassword
を持っています。しかし、createUserRequest
はもう一つdisplayName
というコンストラクタ引数を持っているので、1つのモデルに統合することはできません。
そこで、userに関する共通のリクエストパラメータであるuserName
とpassword
は切り出して共通化させたいと思い、UserRequestBase
というインターフェースを作成しました。
発生している問題・分からないこと
data classのコンストラクタの共通方法がはたして良い方法であるかを確認していただきたいです。
該当のソースコード
Kotlin
1// import以上は略2 3interface UserRequestBase {4 @get:NotNull(message = "入力は必須です")5 @get:Length(min = 8, max = 16, message = "8文字以上16文字以下です")6 @get:Pattern(regexp = """^[a-z\d_]+$""", message = "半角小文字、数字、_で記述してください")7 @get:Pattern(regexp = """^(?=.*[a-z])(?=.*\d)[a-z\d_]{2,}$""", message = "半角小文字、数字を必ず1文字以上含んでください")8 @get:JsonProperty("user_name", required = true)9 val userName: String?10 get() = null11 12 @get:NotNull(message = "入力は必須です")13 @get:Length(min = 8, max = 16, message = "8文字以上16文字以下です")14 @get:Pattern(regexp = """^[\w&&[^_]]+$""", message = "半角大小文字、数字で記述してください")15 @get:Pattern(16 regexp = """^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[\w&&[^_]]{3,}$""",17 message = "半角大小文字、数字の全てを1文字以上含んでください"18 )19 @get:JsonProperty("password", required = true)20 val password: String?21 get() = null22}
試したこと・調べたこと
上記の詳細・結果
調べてみたのですが、バリデーションを持ったプロパティをinterfaceに実装してdata classのコンストラクタに実装するという手法をとっている方は見受けられなかったので、ぜひお聞きしたいです。
補足
特になし
0 コメント