2017-04-20 30 views
1

从IntellijIDEA运行Spring应用程序时出现以下错误。org.test.api.controller.CheckerController中的字段检查器需要一个无法找到的'org.test.api.checker.Checker'类型的bean

2017-04-20 18:20:50.645 ERROR 28680 --- [main] o.s.b.d.LoggingFailureAnalysisReporter : 

*************************** 
APPLICATION FAILED TO START 
*************************** 

Description: 

Field checker in org.test.api.controller.CheckerController required a bean of type 'org.test.api.checker.Checker' that could not be found. 


Action: 

Consider defining a bean of type 'org.test.api.checker.Checker' in your configuration. 

不过,我有类Checker路径org.test.api.checker.Checker

这是类CheckerController的示例代码:

@RestController 
@RequestMapping("/api/{clientId}") 
public class CheckerController { 

    @Autowired 
    Validator validator; 

    @Autowired 
    @Qualifier("Checker") 
    Checker checker; 


    @InitBinder 
    public void initBinder(WebDataBinder binder) { 
     binder.registerCustomEditor(Context.class, new ContextEditor()); 
    } 

@RequestMapping(value = "/{userId}/{sessionId}/check", method = RequestMethod.GET) 
public CheckResults check(@PathVariable String clientId, 
           @PathVariable String userId, 
           @PathVariable String sessionId) { 
    CheckRequest checkRequest = new CheckRequest(CheckRequest.TYPE_1, clientId, userId, sessionId); 
    this.validateRequest(checkRequest); 
    return checker.check(checkRequest); 
} 

} 

Checker

public interface Checker { 

    CheckResults check(CheckRequest request); 

} 

如何解决这个问题?

UPDATE:

@Service 
public class CheckerImpl implements Checker { 

    @Override 
    public CheckResults check(CheckRequest request) 
    { 
     // ... 
    } 
} 

的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>org.test</groupId> 
    <artifactId>mytestapi</artifactId> 
    <version>1.0-SNAPSHOT</version> 

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

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.5.BUILD-SNAPSHOT</version> 
    </parent> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-elasticsearch</artifactId> 
      <version>2.0.0.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>com.github.spullara.mustache.java</groupId> 
      <artifactId>compiler</artifactId> 
      <version>0.9.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.elasticsearch</groupId> 
      <artifactId>elasticsearch</artifactId> 
      <version>${es.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time</artifactId> 
      <version>2.9.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.jena</groupId> 
      <artifactId>jena-tdb</artifactId> 
      <version>3.0.0</version> 
      <scope>compile</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.json</groupId> 
      <artifactId>json</artifactId> 
      <version>20160810</version> 
      <scope>compile</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.spark</groupId> 
      <artifactId>spark-sql_2.10</artifactId> 
      <version>${spark.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jsoup</groupId> 
      <artifactId>jsoup</artifactId> 
      <version>1.10.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.8.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.module</groupId> 
      <artifactId>jackson-module-scala_2.10</artifactId> 
      <version>2.8.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.lucene</groupId> 
      <artifactId>lucene-queryparser</artifactId> 
      <version>6.5.0</version> 
     </dependency> 
    </dependencies> 

    <repositories> 
     <repository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </repository> 
     <repository> 
      <id>spring-snapshots</id> 
      <name>Spring Snapshots</name> 
      <url>https://repo.spring.io/libs-snapshot</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </pluginRepository> 
    </pluginRepositories> 

</project> 
+0

发布您的Checker类和配置类。 – mhshimul

+0

@shi:我发布了“Checker”类。配置类是什么意思? – Dinosaurius

+0

我看到Checker是一个接口,你有没有执行过这个?通过配置类,我的意思是你声明spring配置的类,或者你使用xml配置吗? – mhshimul

回答

0

当您自动装配@Qualifier("Checker")时,请在您的CheckerImpl类的@Service内定义bean名称。

@Service("Checker") 
public class CheckerImpl implements Checker { 

    @Override 
    public CheckResults check(CheckRequest request) 
    { 
     // ... 
    } 
} 
+0

在这种情况下,我得到另一个错误:'org.springframework.beans.factory.BeanCreationException:在类路径资源[org/springframework/boot/autoconfigure/web/Web]中定义的名称'requestMappingHandlerAdapter'。这是什么意思? – Dinosaurius

+0

请分享你的spring启动配置文件 – mhshimul

+0

我只有'pom.xml'。我没有任何其他规格文件。 – Dinosaurius

0

原来的错误是由于使用无效预选赛@Qualifier("Checker")的。上下文中不存在用于标识“检查器”的bean。由于只有一个合适的实现使用额外的@Qualifier是没有用的。

+0

对不起,我对Spring的了解有限。你能否指定你的意思是什么'没有豆ID为“检查”存在于上下文中?我应该在哪里指定它?我有抽象类Checker和它的实现类CheckerImpl。在'CheckerController'中,我定义了'@Autowired @Qualifier(“Checker”)',我理解为使用'Checker'类的要求。 – Dinosaurius

+0

限定符注释不是必需的。只有当你有多个相同类型的bean时,才能通过名称来区分它们。如果你想保留它,你必须给CheckerImpl bean同名'@Service(“Checker”)' – dunni

相关问题