Я получил сущность класса «пользователь» с соответствующей таблицей базы данных, которая содержит много полей (идентификатор, адрес электронной почты, имя, фамилия, encryptedPassword, включен, роль).Однако, если администратор хочет добавить нового пользователя в веб-приложение, он должен только заполнить определенные поля в форме (имя, фамилия, адрес электронной почты).Остальные поля заполняются UserService.
При попытке проверить ввод формы с помощью BindingResult в классе контроллера, BindingResult содержит ошибки, в которых id, encryptedPassword, enabled и role не должны иметь значение null.Поэтому мой вопрос: каков самый модный способ проверки рабочей формы без слишком большого дублирования кода?
UserEnitity:
@Data
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
@Column(name = "user_id")
private Long id;
@Size(max = 60)
@NotNull
@Column(name = "e_mail", unique = true)
@Email
private String email;
@Size(max = 60)
@NotNull
@Column(name = "first_name")
private String firstName;
@Size(max = 60)
@NotNull
@Column(name = "last_name")
private String lastName;
@Size(max = 120)
@NotNull
@Column(name = "encrypted_password")
private String encryptedPassword;
@NotNull
@Column(name = "enabled")
private Boolean enabled;
@ManyToOne
@JoinColumn(name = "role_id", nullable = false)
private Role role;
}
Контроллер:
@Controller
@RequestMapping("employees")
public class EmployeesController {
private UserService userService;
@Autowired
public EmployeesController(UserService userService) {
this.userService = userService;
}
@GetMapping("/add")
public String getAddEmployeesPage(Model model){
model.addAttribute("user", new User());
return "employees/add";
}
@PostMapping("/add")
public String postAddEmployeesPage(@ModelAttribute @Valid User user, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "employees/add";
}
userService.addUser(user);
return "redirect:/employees/add/?successful=true";
}
}
Форма:
<form action="#" th:action="@{/employees/add}" th:object="${user}" method="post">
<div class="form-group">
<label th:text="#{employees.add.first_name}" for="first_name"></label>
<input th:placeholder="#{employees.add.first_name}" th:field="*{firstName}" type="text" class="form-control" id="first_name">
<p th:if="${#fields.hasErrors('firstName')}" th:errors="*{firstName}"></p>
</div>
<div class="form-group">
<label th:text="#{employees.add.last_name}" for="last_name"></label>
<input th:placeholder="#{employees.add.last_name}" th:field="*{lastName}" type="text" class="form-control" id="last_name">
<p th:if="${#fields.hasErrors('lastName')}" th:errors="*{lastName}"></p>
</div>
<div class="form-group">
<label th:text="#{employees.add.email}" for="email"></label>
<input th:placeholder="#{employees.add.email}" th:field="*{email}" type="email" class="form-control" id="email">
<p th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></p>
</div>
<p><button th:text="#{button.submit}" type="submit" class="btn btn-primary"></button><button th:text="#{button.reset}" type="reset" class="btn btn-secondary"></button></p>
</form>