import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;
Why if I send a negative age or a blank name the @Valid annotation doesn’t work and the person saves to database?
There is the following JSON that is sent to the server.
{
"name": "",
"age": -30
}
@Entity Person :
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name")
@NotEmpty(message = "Name mustn't be empty!")
@Size(min = 2, max = 20, message = "Name must be between 2 and 20 characters long!")
private String name;
@Column(name = "age")
@Min(value = 1, message = "Age must be greater than 0!")
private int age;
Controller method:
@PostMapping
public ResponseEntity<HttpStatus> create(@RequestBody @Valid Person person, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
StringBuilder errorMsg = new StringBuilder();
List<FieldError> errors = bindingResult.getFieldErrors();
for (FieldError error : errors) {
errorMsg.append(error.getField()).append(" - ").append(error.getDefaultMessage()).append(";");
}
throw new PersonNotCreatedException(errorMsg.toString());
}
personService.savePerson(person);
return ResponseEntity.ok(HttpStatus.OK);
}
org.springframework.validation.BeanPropertyBindingResult: 0 errors