我的项目一直运行得很好,直到我在我的POM中添加了'hibernate-validator‘来为@RequestBody对象使用@Valid特性的REST请求。
我有一台NoClassDefFoundError
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/spring/app-context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
Caused by: java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
... 21 more
Caused by: java.lang.ClassNotFoundException: javax.validation.ValidatorFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 35 more我的POM是

最后一行是出问题的,我已经尝试了几个版本,但都没有成功
发布于 2016-10-18 18:55:08
添加
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>发布于 2016-10-18 18:06:58
转到.m2存储库并删除org/hibernate/ path下的文件夹。现在清理项目并再次构建项目。这可能会工作得很好。
发布于 2016-10-18 23:37:32
上面的答案都没有解决我的问题,所以我决定开发我自己的验证器
一个新的注解接口
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) //can use in fields only.
public @interface Required {
}和一个基类来扩展我需要验证的所有对象(在spring REST @RequestBody)
public void validate(){
Field[] fields = this.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Required.class)) {
Object value;
field.setAccessible(true);
try {
boolean fail = false;
value = field.get(this);
if (value==null){
fail = true;
}
if (value instanceof String && ((String) value).isEmpty()){
fail = true;
}
if (value instanceof List && ((List<?>) value).isEmpty()){
fail = true;
}
if (fail){
throw new PreconditionFailedException("attribute '" + field.getName() + "' cannot be empty");
}
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}https://stackoverflow.com/questions/40104656
复制相似问题