MrD:
Tengo el método siguiente en mi controlador:
@PostMapping("/register")
public String registerNewUser(@Valid User user, BindingResult result, Model model, RedirectAttributes redirectAttributes) {
System.out.println(result);
System.out.println(user);
if(result.hasErrors()) {
System.out.println("***ERROR***");
System.out.println(result.getAllErrors());
return result.getAllErrors().toString();
} else {
//userRepository.save(user);
System.out.println("user saved!");
return "user saved!";
}
}
Y mi entidad de usuario especifica:
@NonNull
@Column(nullable = false, unique = true)
@Valid
public String alias;
Ahora bien, si hago una simple solicitud posterior (yo uso el cliente avanzado RESTO para el cromo extensión) me sale:
org.springframework.validation.BeanPropertyBindingResult: 0 errors
User(id=null, email=null, password=null, enabled=false, firstName=null, lastName=null, fullName=null null, alias=null, roles=[], links=[])
user saved!
Donde parece validar pesar @NonNull alias siendo nula.
Si cambio @NonNull a @NotEmpty
A continuación, la validación funciona como se esperaba:
[Field error in object 'user' on field 'alias': rejected value [null]; codes [NotEmpty.user.alias,NotEmpty.alias,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.alias,alias]; arguments []; default message [alias]]; default message [must not be empty]]
Pero lo que no entiendo es por qué @NonNull permite valores nulos?
Andrónico:
Debe utilizar NotNull
de paquete javax.validation y no de Lombok (los que se van a eliminar, cuando se inicia la validación de soporte java - ver aquí ). Se valida los granos. Más información aquí . También puede utilizar hibernación es @NotNull
de org.hibernate.validator. Esto también lo hace la validación.