3
votes

L'annotation @NonNull autorise les valeurs nulles lors de la validation

J'ai la méthode suivante dans mon contrôleur:

[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]]

Et mon entité utilisateur spécifie:

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!

Maintenant si je fais un simple post request (j'utilise le client Advanced REST pour l'extension chrome) J'obtiens:

@NonNull
@Column(nullable = false, unique = true)
@Valid
public String alias;

Où il semble valider malgré l'alias @NonNull étant nul.

Si je change @NonNull en @NotEmpty

Alors la validation fonctionne comme prévu:

@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!";
        }
    }

MAIS ce que je ne comprends pas, c'est pourquoi @NonNull autorise les Nulls?


4 commentaires

De quel package avez-vous NotNull ?


Importation du projet Lombok


Devrait provenir du package javax.validation, je suppose.


Ah ok je vois, ça aurait du sens. Donc, si je veux utiliser les deux, je devrais utiliser le nom complet du package pour un?


3 Réponses :


3
votes

Il n'y a pas d'annotation @NonNull dans l'API de validation JSR-303. L'annotation s'appelle @NotNull . Assurez-vous que vous utilisez réellement l'annotation javax.validation.constraints.NotNull pour marquer le champ.


0 commentaires

2
votes

Vous devez utiliser NotNull du package javax.validation et non de lombok (ceux-ci doivent être supprimés, lorsque java commence à prendre en charge la validation - voir ici ). Il valide les beans. Plus d'informations ici . Vous pouvez également utiliser le @NotNull de hibernate depuis org.hibernate.validator. Cela fait également la validation.


0 commentaires

2
votes


@NotNull: L'élément annoté ne doit pas être nul.Accepte tout type

@NotEmpty: L'élément annoté ne doit pas être nul ni vide. Les types pris en charge sont:

  • CharSequence (la longueur de la séquence de caractères est évaluée)
  • Collection (la taille de la collection est évaluée)
  • Carte (la taille de la carte est évaluée)
  • Tableau (la longueur du tableau est évaluée)

@NotBlank: L'élément annoté ne doit pas être nul et doit contenir au moins un caractère non blanc. Accepte CharSequence


@NonNull refer to Lombok

Voici les grands détails que vous pourriez aimer Cliquez ici


0 commentaires