首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BeanCreationException entityManagerFactory NoClassDefFoundError ValidatorFactory

BeanCreationException entityManagerFactory NoClassDefFoundError ValidatorFactory
EN

Stack Overflow用户
提问于 2016-10-18 17:36:19
回答 3查看 169关注 0票数 1

我的项目一直运行得很好,直到我在我的POM中添加了'hibernate-validator‘来为@RequestBody对象使用@Valid特性的REST请求。

我有一台NoClassDefFoundError

代码语言:javascript
复制
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是

最后一行是出问题的,我已经尝试了几个版本,但都没有成功

EN

回答 3

Stack Overflow用户

发布于 2016-10-18 18:55:08

添加

代码语言:javascript
复制
    <dependency>
       <groupId>javax.validation</groupId>
       <artifactId>validation-api</artifactId>
       <version>1.0.0.GA</version> 
    </dependency>
票数 1
EN

Stack Overflow用户

发布于 2016-10-18 18:06:58

转到.m2存储库并删除org/hibernate/ path下的文件夹。现在清理项目并再次构建项目。这可能会工作得很好。

票数 0
EN

Stack Overflow用户

发布于 2016-10-18 23:37:32

上面的答案都没有解决我的问题,所以我决定开发我自己的验证器

一个新的注解接口

代码语言:javascript
复制
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) //can use in fields only.
public @interface Required {

}

和一个基类来扩展我需要验证的所有对象(在spring REST @RequestBody)

代码语言:javascript
复制
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();
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40104656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档