I cannot get annotations such as @NotEmpty, @NotBlank and @NotNull to fire in my Spring Boot application.
I've followed this (maven) example:
https://spring.io/guides/gs/validating-form-input/
...and I don't see what I am doing wrong.
POJO:
import javax.validation.constraints.NotBlank;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class College
{
@NotBlank
private String collegeCode;
.
.
.
Spring controller:
@RequestMapping(value="/addCollege", method = RequestMethod.POST)
public String addCollege(@Valid @ModelAttribute("college") College college, BindingResult bindingResult, Model model, HttpSession session)
{
if(bindingResult.hasErrors()) //this is never true
{
logger.debug("Errors when adding new college!!!");
return "admin/colleges/addCollege";
}
collegeProcessor.saveCollege(college);
return getAllColleges(model, session);
}
Screen:
<form action="#" th:action="${addOrEdit} == 'add' ? @{/addCollege} : @{/updateCollege}" th:object="${college}" method="post">
<table class="table">
<tr>
<td>College Code</td>
<td><input size="10" name="collegeCode" th:field="*{collegeCode}"/></td>
<div id="errors" th:if="${#fields.hasErrors('collegeCode')}" th:errors="*{collegeCode}"></div>
</tr>
.
.
.
As well as @NotBlank, I have tried @NotEmpty and @NotNull, but the same thing happens. My screen does not validate the input, and allows a college object with an empty collegeCode to be saved.
The interesting thing is if I change my POJO to use the deprecated Hibernate validator instead...
import org.hibernate.validator.constraints.NotBlank;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class College
{
@NotBlank
private String collegeCode;
.
.
.
...then the validation DOES fire, and the screen prevents me from saving a College object with an empty collegeCode.
Can anyone tell me why my validation doesn't work when using the javax.validation.constraints validators?
@NotNull validates that the annotated property value is not null. @AssertTrue validates that the annotated property value is true.
The @Valid annotation ensures the validation of the whole object. Importantly, it performs the validation of the whole object graph. However, this creates issues for scenarios needing only partial validation. On the other hand, we can use @Validated for group validation, including the above partial validation.
Include Maven dependency for 2.3.0.RELEASE in pom.xml, however, it is not required for lower version of Spring Boot Application.
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
Since version 2.3.0.RELEASE the validation starter is not included in web/webflux starters by default, you need to add it manually. More details here
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With