Итак, я изучил Spring и Thymeleaf и создал систему регистрации и входа в систему.
Итак, я хочу, чтобы моя регистрационная форма была проверена, прежде чем кто-либо сможет ее отправить. Вот как я сконфигурировал свой класс модели пользователя.
@Entity
public class User {
@Id
@Column(nullable = false)
@Size(min=4, max=32, message="Username name must be between 4 and 32 characters")
private String username;
@Column(nullable = false)
@Size(min=8, max=32, message="Password must be between 8 and 32 characters")
@Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,10}$+",
message = "Your password must contain at least one uppercase letter, one lowercase letter, " +
"one number and one special character")
private String password;
@Column(nullable = false)
@Email(message="Please enter a valid email")
private String email;
private boolean isAccountNonExpired;
private boolean isAccountNonLocked;
private boolean isCredentialsNonExpired;
private boolean isEnabled;
private String roles;
private String permissions;
Вот мой контроллер, который обрабатывает запросы на получение и публикацию.
@GetMapping("register")
public String getRegisterView(Model model){
model.addAttribute("user", new User());
return "register";
}
@PostMapping("register")
public String postRegisterView(@Valid User user, Model model, BindingResult bindingResult){
model.addAttribute("user", user);
if (bindingResult.hasErrors()) {
return "register";
}
applicationUserService.setupUser(user);
return "redirect:index";
}
и вот мой html файл , который проверяет наличие ошибок и распечатывает их
<form class="form-register" method="POST" th:action="@{/register}" th:object="${user}">
<h2 class="form-register-heading">register</h2>
<p>
<label for="username" class="sr-only">Username</label>
<input th:field="*{username}" type="text" id="username" name="username" class="form-control-lg" placeholder="Username" required autofocus>
<small><span th:if="${#fields.hasErrors('username')}" th:errors="*{username}">Full name error</span></small>
</p>
<p>
<label for="username" class="sr-only">Email</label>
<input type="email" th:field="*{email}" id="email" name="username" class="form-control-lg" placeholder="Email" required>
<small><span th:if="${#fields.hasErrors('email')}" th:errors="*{email}">Full name error</span></small>
</p>
<p>
<label for="email-confirm" class="sr-only">Confirm Email</label>
<input type="email" id="email-confirm" name="email-confirm" class="form-control-lg" placeholder="Confirm Email" required>
</p>
<p>
<label for="password" class="sr-only">Password</label>
<input type="password" th:field="*{password}" id="password" name="password" class="form-control-lg" placeholder="Password" required>
<small><span th:if="${#fields.hasErrors('password')}" th:errors="*{password}">Full name error</span></small>
<p>
<label for="confirm-password" class="sr-only">Confirm Password</label>
<input type="password" id="confirm-password" name="confirm-password" class="form-control-lg" placeholder="Confirm Password" required>
</p>
<input type="hidden" th:field="*{isAccountNonExpired}" th:value="true" id="isAccountNonExpired" name="isAccountNonExpired" class="form-control-lg" required>
<input type="hidden" th:field="*{isAccountNonLocked}" th:value="true" id="isAccountNonLocked" name="isAccountNonLocked" class="form-control-lg" required>
<input type="hidden" th:field="*{isCredentialsNonExpired}" th:value="true" id="isCredentialsNonExpired" name="isCredentialsNonExpired" class="form-control-lg" required>
<input type="hidden" th:field="*{isEnabled}" th:value="true" id="isEnabled" name="isEnabled" class="form-control-lg" required>
<input type="hidden" th:field="*{roles}" value="USER" id="roles" name="roles" class="form-control-lg" required>
<input type="hidden" th:field="*{permissions}" value="normalUser" id="permissions" name="permissions" class="form-control-lg" required>
<button class="btn btn-lg btn-custom btn-block roboto" type="submit">Register</button>
</form>
По сути, это очень простая форма, которая просто извлекает объект из введенных значений, а затем я сохраняю их в своем репозитории.
The issue is none of the validations are being applied by and I can basically input whatever I feel like and it's being saved to the repo...
Скриншот базы данных
Я просмотрел все онлайн-ссылки и решения, ни одно из них не помогло в моем случае.