Validador de Hibernato: Validar 2 campos Match
-
25-09-2019 - |
Pergunta
Fiquei me perguntando, estou negligenciando algo ou o Validador do Hibernato não oferece anotação para verificar se 2 campos são iguais (como uma senha). Sei que posso escrever meus próprios validadores, mas bem, isso parece funcionalidade padrão.
Solução 3
Apenas fui para a rota do validador personalizada. As outras duas respostas aqui não estão realmente relacionadas à pergunta. Com um pouco de Google, encontrei um exemplo de campo de campo.
Outras dicas
Se você estiver usando a Spring Framework, poderá usar o Spring Expression Language (SPEL) para isso. Escrevi uma pequena biblioteca que fornece ao Validador JSR-303 com base no SPEL que facilita muito as validações de campo cruzado. Dar uma olhada em https://github.com/jirutka/validator-spring.
Isso validará a igualdade de campos de senha quando pelo menos um deles não estiver vazio.
@SpELAssert(value = "password.equals(passwordVerify)",
applyIf = "password || passwordVerify",
message = "{validator.passwords_not_same}")
public class User {
private String password;
private String passwordVerify;
}
Um exemplo bem estabelecido que trata de um problema semelhante, isto é, validação de campo cruzado:
Validação em campo cruzado com o Validador de Hibernato (JSR 303)
Hibernate é um mapeador ORM.
É usado para persistir dados em um banco de dados e extraí -los novamente. Como tal, ter 2 campos com um valor idêntico não faz muito sentido (do ponto de vista da persistência). Isso é algo que você deve verificar na sua lógica de negócios.
E eu estou com Junesh ... não persista suas senhas em um formato recuperável ... procure haver e salgar - ou melhor ainda, pense em OpenID para que você não precise incomodar seus clientes com mais uma senha estúpida ...
Espero que você não esteja salvando a senha Confirmar também no banco de dados. Você não possui vorações fora da caixa para isso, mas, em vez disso, precisará usar a anotação personalizada, o que também é bastante direto.