SpringBoot + Thymeleaf + Hibernate Validator не выдает ошибку валидации
Создаю pet-проект, столкнулся с проблемой, что при не прохождении валидации thymeleaf не выдает ошибку валидации(редирект на страницу ввода работает исправно). Смотрел документацию spring, thymeleaf.
Мой контроллер:
@Controller
public class ProjectController {
@Autowired
private ProjectDaoService projectDaoService;
@GetMapping("/addProjects") // добавление объекта
public String addProject(Model model){
model.addAttribute("project", new Project());
Map <String, String> allTypes = new HashMap<>(); // это для выпадающего списка, можно не обращать внимания, данный код работает
allTypes.put("Duration", "Duration");
allTypes.put("Quantity", "Quantity");
model.addAttribute("allTypes", allTypes);
return "addProject";
}
@PostMapping("/resultOfAddProject")
public String resultOfAddProject(@Valid @ModelAttribute("project") Project project
, BindingResult bindingResult){
if (bindingResult.hasErrors()){
return "redirect:/addProjects";
}
projectDaoService.saveProject(project);
return "redirect:/";
}
Мой объект, поле которого заполняю
@Entity
@Table(name ="project")
@Data
public class Project {
...
@Column(name = "project_name")
@NotBlank(message = "some problems")
private String name;
}
Страница с формой, которая не работает
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:form="http://www.springframework.org/tags/form">
<head>
<meta charset="utf-8">
<title>Добавление проекта</title>
</head>
<body>
<form action="/resultOfAddProject" th:action="@{/resultOfAddProject}" th:object="${project}" method="post">
Имя проекта<br>
<input type="text" th:field="*{name}"/>
<span th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</span>
<br><br>
Тип проекта <select th:field="*{type}"/>
<option value="">Выберите тип проекта</option>
<option th:each="type : ${allTypes}"
th:value="${type.key}" th:text="${type.value}"></option>
</select>
<br><br>
<input type="submit">
</form>
</body>
</html>
Зависимости в gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.1.6.Final'
}
Ответы (1 шт):
Автор решения: Кирилл Кириллов
→ Ссылка
Ошибку нашел - в контроллере после проверки на наличие ошибок нужно было возвращать ссылку на контроллер, а я - редиректил, правильный вариант такой:
@PostMapping("/resultOfAddProject")
public String resultOfAddProject(@Valid @ModelAttribute("project") Project project
, BindingResult bindingResult){
if (bindingResult.hasErrors()){
return "/addProject";
}
projectDaoService.saveProject(project);
return "redirect:/";
}
Если кто-то умный прочитает это сообщение - объясните почему редирект все ломал?