Spring boot:创建名为“methodValidationPostProcessor”的bean时出错

阿迪亚·埃克博特

我有一个 Spring Boot 应用程序,我正在创建 war 文件并在 Tomcat 8 上进行部署。代码在我的 Eclipse Oxygen 中运行时运行良好,并且在 Tomcat8 上运行应用程序时出现异常。

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'methodValidationPostProcessor' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Unsatisfied dependency expressed through method 'methodValidationPostProcessor' parameter 1; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.validation.Validator' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:467)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:223)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:702)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:527)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151)
at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131)
at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5311)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 10 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.validation.Validator' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
    ... 32 more

下面是我的 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.aditya</groupId>
    <artifactId>MyApp</artifactId>
    <version>Final</version>

<packaging>war</packaging>

<name>MyApp</name>
<description>MyApp</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.3.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<repositories>
    <repository>
        <id>oracle-repo</id>
        <name>oracle repo</name>
        <url>http://download.oracle.com/maven</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- <exclusions>
            <exclusion>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
            </exclusion>
        </exclusions> -->
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.4.0</version>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.4.0</version>
    </dependency> -->

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>


    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.5</version><!--$NO-MVN-MAN-VER$ -->
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.5</version><!--$NO-MVN-MAN-VER$ -->
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>com.github.ulisesbocchio</groupId>
        <artifactId>jasypt-spring-boot-starter</artifactId>
        <version>1.16</version>
    </dependency>

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
    </dependency>

    <!-- <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency> -->

    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>core</artifactId>
        <version>3.3.2</version>
    </dependency>

    <dependency>
        <groupId>pushpayment</groupId>
        <artifactId>en</artifactId>
        <version>2.0.2</version>
    </dependency>

    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>2.6.0</version><!--$NO-MVN-MAN-VER$ -->
    </dependency>

    <dependency>
        <groupId>net.sf.jt400</groupId>
        <artifactId>jt400</artifactId>
        <version>6.6</version>
    </dependency>

    <!-- <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-rest-hal-browser</artifactId>
    </dependency> -->

    <dependency>
        <groupId>net.jodah</groupId>
        <artifactId>expiringmap</artifactId>
        <version>0.5.8</version>
    </dependency>

</dependencies>

<build>
    <finalName>MyApp</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <executions>
                <execution>
                    <id>install-external</id>
                    <phase>build</phase>
                    <configuration>
                        <file>C:/Users/adekbote/.m2/repository/pushpayment/en/2.0.2/en-2.0.2.jar</file>
                        <repositoryLayout>default</repositoryLayout>
                        <groupId>pushpayment</groupId>
                        <artifactId>en</artifactId>
                        <version>2.0.2</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

下面是我的 MyApp.java

@ComponentScan("com.ad.*")
@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(MyApp.class);
}

public static void main(String[] args) throws Exception {
    SpringApplication.run(MyApp.class, args);
}
}

下面是我的 Config.java

@Configuration
@EnableSwagger2
public class Config {

    private LoggerUtil log = LoggerUtil.getInstance();

    private static final String CLASSNAME = "Config";

    @Bean(name = "validator")
    @Qualifier("validator")
    public Validator validator() {
        log.doLog(2, CLASSNAME, "validator", "inside validator = ");
        ValidatorFactory validatorFactory = Validation
                .buildDefaultValidatorFactory();
        Validator validator = validatorFactory.getValidator();
        return validator;
    }
}

下面是我的 AuthorizationServiceImpl.java

@Service
public class AuthorizationServiceImpl implements AuthorizationService {

    @Autowired
    @Qualifier("validator")
    private Validator validator;

    @Autowired
    @Qualifier("requestValidatorClass")
    private Map<String, String> requestValidatorClass;

    private LoggerUtil log = LoggerUtil.getInstance();

    private static final String CLASSNAME = "AuthorizationServiceImpl";

    @Override
    public ResponseBean validate(Object request, String type) throws Throwable {
        ResponseBean responseBean = new ResponseBean();
        final String methodName = "validate";
        String className = null;


        try {
            className = requestValidatorClass.get((type));
            log.doLog(2, CLASSNAME, methodName, "className = " + className);

            if(className != null){
                Class<?> cls = Class.forName(className);
                RequestValidator requestValidator = (RequestValidator) cls.newInstance();
                responseBean = requestValidator.validate(request, validator);
            }else{
                responseBean.setResponseCode(QRConstants.INVALID_FUNCTION);
                responseBean.setResponseMsg(Utils.getRespDesc(QRConstants.INVALID_FUNCTION));
            }
        } catch (Exception e) {
            log.doLog(3, CLASSNAME, methodName, LoggerUtil.getExStackTrace(e));
            responseBean.setResponseCode(QRConstants.TECHNICAL_ERROR_CODE);
            responseBean.setResponseMsg(Utils.getRespDesc(QRConstants.TECHNICAL_ERROR_CODE));
        }

        return responseBean;
    }

}

任何人都可以让我知道为什么我在运行 Tomcat 时会收到此错误。

阿布舍克

spring-boot-starter-web 给 hibernate-validator 添加了一个依赖,因此 spring 需要配置一个验证器依赖。

删除该依赖项,添加排除项。我看到你评论了排除:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
            </exclusion>
        </exclusions>
</dependency>

或者如果你想使用这个依赖,那么升级到最新版本:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.13.Final</version>
</dependency>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Spring Boot 中创建名为 DataSourceTransactionManager 的 bean 时出错 [JPA]

创建名为'requestMappingHandlerMapping'的Spring Boot时出错

使用spring-boot-admin-server时创建名为`conversionServicePostProcessor`的bean时出错

具有弹簧安全性的 Spring Boot:创建名为“securityConfiguration”的 bean 时出错

Spring Boot:“创建名为 baseConfig 的 bean 时出错:调用 init 方法失败”NPE

Spring Boot异常,创建bean时出错

Spring Boot 错误:创建名为“albumController”的 bean 时出错:通过字段“albumService”表达的不满足的依赖关系

Spring Boot-创建名称为'jmsConnectionFactory'的bean时出错

Spring Boot错误:创建名称为“ entityManagerFactory”的bean时出错

在Spring Boot中创建名称为'batchConfigurer'的bean时出错

在Spring Boot的JUnit测试中创建bean时出错

单元测试在测试 spring 集成 TCP 组件时创建名为“amqAdmin”的 bean 时出错

在Spring Framework中使用STOMP创建名为'clientInboundChannel'的bean时出错

创建名为“securityTagLib”的 bean 时出错 - (grails-spring-security-saml 插件)

解决 java.lang.AbstractMethodError,在 Spring 中创建名为“entityManagerFactory”的 bean 时出错

Spring Cloud 流 kafka 绑定器在创建名为“bindingService”的 bean 时出错

测试Spring时创建bean时出错

Spring-boot和spring-data-jpa Mysql:创建名称为'entityManagerFactory'的bean时出错

具有Spring Security的Spring Boot:创建名称为“ securityFilterChainRegistration”的bean时出错

在Spring中创建bean时出错

使用Spring Boot时在类路径资源中定义名称为'entityManagerFactory'的bean创建时出错

spring Bean创建异常使用名称创建bean时出错

spring boot kotlin错误创建名为“entityManagerFactory”的bean

Spring Boot Test-创建名称为SpringBootRepositoryRestMvcConfiguration的bean时出错

使用Spring Boot 2.0.3启动ElasticSearch 6.4.3-创建bean时出错

Spring Boot-在类路径资源中创建名称为'dataSource'的bean时出错

运行spring boot build:在类路径中创建名称为'entityManagerFactory'的bean时出错

Spring Boot 2.1.1到2.1.2:创建名称为'payloadRootAnnotationMethodEndpointMapping'的bean时出错

需要帮忙!Spring Boot错误:不满意的DependancyException:创建名称为''的bean时出错