Tento escrever um aplicativo muito simples com o validador de hibernação:
meus passos:
adicione a seguinte dependência em pom.xml:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.1.Final</version>
</dependency>
escrever código:
class Configuration {
Range(min=1,max=100)
int threadNumber;
//...
public static void main(String[] args) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Configuration configuration = new Configuration();
configuration.threadNumber = 12;
//...
Set<ConstraintViolation<Configuration>> constraintViolations = validator.validate(configuration);
System.out.println(constraintViolations);
}
}
E recebo o seguinte rastreamento de pilha:
Exception in thread "main" javax.validation.ValidationException: Unable to instantiate Configuration.
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:279)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110)
...
at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:110)
at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:86)
at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41)
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:276)
... 2 more
O que eu errado?
java
hibernate
validation
maven
hibernate-validator
gstackoverflow
fonte
fonte
5.2.4.Final
resolver o problema para mim.5.2.4.Final
e a exceção ainda está lá.Respostas:
Ele está funcionando após adicionar as
pom.xml
seguintes dependências:Primeiros passos com o Hibernate Validator :
fonte
<dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>2.3.1</version></dependency>
foi suficiente para mimfaça apenas
fonte
hibernate-validator
confia nessa dependência?Se você estiver usando o tomcat como o tempo de execução do servidor e obtiver esse erro nos testes (porque o tempo de execução do tomcat não está disponível durante os testes), faz sentido incluir o tempo de execução do tomcat el em vez do do glassfish). Este seria:
fonte
tomcat-jasper-el
dependência, já que parece incluir transitivamente atomcat-el-api
dependência.Se você estiver usando o Spring Boot com starters - esta dependência adiciona ambos
tomcat-embed-el
ehibernate-validator
dependências:fonte
Caso você não precise de javax.el (por exemplo, em um aplicativo JavaSE), use ParameterMessageInterpolator do validador Hibernate . O validador do Hibernate é um componente independente, que pode ser usado sem o próprio Hibernate .
Depende do validador de hibernação
Use ParameterMessageInterpolator
fonte
Em relação à página de documentação do validador do Hibernate , você deve definir uma dependência para uma
JSR-341
implementação:fonte
Se estiver usando Spring Boot, isso funcionará bem. Mesmo com Spring Reactive Mongo.
e configuração de validação:
fonte
para sbt, use as versões abaixo
fonte
De acordo com a documentação Getting started with Hibernate Validator , uma implementação Expression Language (EL) deve ser fornecida. Em um ambiente Java EE, ele seria fornecido pelo contêiner. No entanto, em um aplicativo autônomo como o seu, ele precisa ser fornecido.
O exemplo de dependência da documentação é um pouco desatualizado, pois a linguagem de expressão fez a transição para o projeto Jakarta EE em 2018. Para usar a versão Jakarta EE da linguagem de expressão, adicione a seguinte dependência Eclipse Glassfish EL:
Existem outras implementações de EL que podem ser usadas além do Glassfish. Por exemplo, Spring Boot por padrão usa Tomcat integrado . Esta versão do EL pode ser usada da seguinte forma:
fonte
para gradle:
fonte