実現したいこと
CRUDアプリをKotlinとSpringBootで実装しています。
バリデーションを実装したいのですが、該当するクラスのプロパティに注釈を付けているのですが機能しません。
SignupForm.kt
kotlin
1package com.example.simpleLoginApp.login.model 2 3import org.hibernate.validator.constraints.Length 4import org.springframework.format.annotation.DateTimeFormat 5import java.util.* 6import javax.validation.constraints.* 7 8data class SignupForm( 9 @NotBlank 10 @Email 11 val userId: String?, 12 @NotBlank 13 @Length(min= 4, max = 100) 14 @Pattern(regexp = "^[a-zA-Z0-9]+$") 15 val password: String?, 16 @NotBlank 17 val userName: String?, 18 @NotNull 19 @DateTimeFormat(pattern = "yyyy/MM/dd") 20 val birthday: Date?, 21 @Min(20) 22 @Max(100) 23 val age: Int?, 24 @AssertFalse 25 val marriage: Boolean? 26 ) 27
SignupController.kt
kotlin
1package com.example.simpleLoginApp.login.controller 2 3import com.example.simpleLoginApp.login.model.SignupForm 4import org.springframework.stereotype.Controller 5import org.springframework.ui.Model 6import org.springframework.validation.BindingResult 7import org.springframework.validation.annotation.Validated 8import org.springframework.web.bind.annotation.GetMapping 9import org.springframework.web.bind.annotation.ModelAttribute 10import org.springframework.web.bind.annotation.PostMapping 11 12@Controller 13class SignupController { 14 15 private fun initRadioMarriage():Map<String, String> { 16 〜略〜 17 } 18 19 @GetMapping("/signup") 20 fun getSignUp(@ModelAttribute("signupForm") form: SignupForm, model: Model): String { 21 〜略〜 22 } 23 24 @PostMapping("/signup") 25 fun postSignUp(@ModelAttribute @Validated form: SignupForm, bindingResult: BindingResult, model: Model): String { 26 27 if(bindingResult.hasErrors()){ 28 return getSignUp(form, model) 29 } 30 //リダイレクト 31 return "redirect:/login" 32 } 33 34}
html
1<!DOCTYPE html> 2<html xmlns:th="http:www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"/> 5 <link th:href="@{/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css}" rel="stylesheet"> 6 <script th:src="@{/webjars/jquery/1.11.1/jquery.min.js}"></script> 7 <script th:src="@{/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js}"></script> 8 <title>SignUp</title> 9</head> 10<body> 11 <div class="col-sm-5"> 12 <div class="page-header"> 13 <h1>ユーザー登録画面</h1> 14 </div> 15 <form method="post" action="/signup" th:object="${signupForm}"> 16 <table class="table table-bordered table-hover"> 17 <tr> 18 <th class="active col-sm-3">ユーザーID</th> 19 <td> 20 <div class="form-group"> 21 <input type="text" class="form-control" th:field="*{userId}"/> 22 </div> 23 </td> 24 </tr> 25 26 <tr> 27 <th class="active">パスワード</th> 28 <td> 29 <div class="form-group"> 30 <input type="text" class="form-control" th:field="*{password}"> 31 </div> 32 </td> 33 </tr> 34 35 <tr> 36 <th class="active">ユーザー名</th> 37 <td> 38 <div class="form-group"> 39 <input type="text" class="form-control" th:field="*{userName}"> 40 </div> 41 </td> 42 </tr> 43 <tr> 44 <th class="active">誕生日</th> 45 <td> 46 <div class="form-group"> 47 <input type="text" class="form-control" 48 placeholder="yyyy/MM/dd" 49 th:field="*{birthday}"> 50 </div> 51 </td> 52 </tr> 53 <tr> 54 <th class="active">年齢</th> 55 <td> 56 <div class="form-group"> 57 <input type="text" class="form-control" th:field="*{age}"> 58 </div> 59 </td> 60 </tr> 61 <tr> 62 <th class="active">結婚</th> 63 <td> 64 <div class="form-group"> 65 <div th:each="item:${radioMarriage}"> 66 <input type="radio" name="radioMarriage" 67 th:text="${item.key}" 68 th:value="${item.value}" 69 th:field="*{marriage}"> 70 </div> 71 </div> 72 </td> 73 </tr> 74 </table> 75 <button class="btn btn-primary" type="submit"> 76 ユーザー登録 77 </button> 78 </form> 79 </div> 80</body> 81</html>
実際に起こった現象
ローカルホストで実行して、入力をせずにユーザー登録ボタンを押すと、バリデーションが働いてメッセージを出力してくれると思っていたのですが、localhost:8888/loginに遷移するだけでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/29 14:52