2017-09-14 5 views
0

Je suis en train de faire les suivants validations:démarrage du printemps de validation de champ personnalisé

  • Vérification dans un courriel existe dans la base de données.
  • La vérification d'un nom d'utilisateur existe dans la base de données.
  • Vérification de la saisie du mot de passe.

J'utilise une classe pour la validation. Exemple:

public class RegisterRequest { 

    @NotNull(message = "Please enter an email") 
    @Email(message = "Not a valid email") 
    @JsonProperty("email") 
    public String email; 

    @NotNull(message = "Please enter a name") 
    @JsonProperty("name") 
    public String name; 

    @NotNull(message = "Please enter a password") 
    @JsonProperty("password") 
    public String password; 

    @NotNull 
    @JsonProperty("password_confirmation") 
    public String passwordConfirmation; 
} 

Tout cela fonctionne bien jusqu'à présent.
Mais maintenant je veux construire dans la validation de mot de passe (Vérifiez si la correspondance de deux mots de passe). Je n'utiliserai cette fois qu'une seule fois, donc je pense qu'il n'est pas nécessaire de créer une annotation entière pour cela.
Comment puis-je faire cela sans l'utilisation d'une annotation.

La solution que je trouve que vient ferme à ce que je veux est d'utiliser @AssertTrue sur une méthode qui valide les mots de passe:

@AssertTrue("Passwords don't match") 
public boolean checkPasswords() { 
    return this.password.equals(this.passwordConfirmation); 
} 

Cela fonctionne, mais il n'est pas lié à un champ, mais il est un global Erreur.
Donc, je ne peux pas savoir à quel champ appartient l'erreur Passwords don't match. Existe-t-il un moyen de lier la validation checkPasswords à un champ?

+1

https://www.mkyong.com/spring-mvc/spring-mvc-password-example/ – StanislavL

+1

@StanislavL ce lien 7 ans et parle de l'ancienne méthode de validation. Notez que l'auteur a mis la balise 'bean-validation' et a utilisé les annotations JSR-303. –

Répondre

1

Cela fonctionne mais n'est pas lié à un champ, mais il s'agit d'une erreur globale.

Oui, c'est une erreur globale car vous travaillez avec un objet entier.

Comment faire ceci sans l'utilisation d'une annotation.

Je ne connais pas ces moyens. Vous devez écrire votre propre validateur pour y parvenir.

+0

Merci d'avoir écrit le mien: https://github.com/jwz104/validation C'est loin d'être terminé mais la base est là. –

+0

J'ai aussi écrit le mien il y a quelques années: [FieldsMatchValidator] (https://github.com/php-coder/mystamps/blob/581412f565c71ecc482da5542e7ff77fe6a91a7f/src/main/java/ru/mystamps/web/support/beanvalidation/FieldsMatchValidator .java) et [UniqueLoginValidator] (https://github.com/php-coder/mystamps/blob/581412f565c71ecc482da5542e7ff77fe6a91a7f/src/main/java/ru/mystamps/web/support/beanvalidation/UniqueLoginValidator.java) –