【问题标题】:Rest API using Spring and MongoDB使用 Spring 和 MongoDB 的 Rest API
【发布时间】:2016-02-16 09:45:34
【问题描述】:

我一直在使用Spring 开发一个Rest API,其中MongoDB 用于数据库。

到目前为止,这是我的代码:

用户.java:

@Id
private String id;
private String firstName;
private String lastName;
private String address;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}

UserRepository 接口:

public interface UserRepository extends MongoRepository<User, String>{

}

UserRestController.java:

@RestController
@RequestMapping("/users")
public class UserRestController {

    @Autowired
    private UserRepository repo;

    @RequestMapping(method = RequestMethod.GET)
    public List<User> getAll() {
        System.out.println("Get Method Invoked");
        return repo.findAll();
    }

    @RequestMapping(method = RequestMethod.POST)
    public User create(@RequestBody User user) {
        return repo.save(user);
    }

    @RequestMapping(method = RequestMethod.DELETE, value = "{id}")
    public void delete(@PathVariable String id) {
        repo.delete(id);
    }

}

ServletInitializer 类:

public class ServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        System.out.println("Initializer loaunched");
        return new Class[] { MongoSeparateServerConfiguration.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

配置类:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.cg.mongo")
public class MongoSeparateServerConfiguration {

}

这就是 java 类的全部内容,我运行 MongoDB 实例。当我尝试启动tomcat 服务器时,它给出了一个异常BeanNotFoundException

如何解决这个问题?

这是我得到的例外:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRestController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.cg.mongo.service.UserRepository com.cg.mongo.controller.UserRestController.repo; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.cg.mongo.service.UserRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    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:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4810)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 似乎找不到合适的 bean 来自动装配。你能写下哪个 bean 无法解析,因为我在屏幕截图上看不到它吗?
  • @NikolayTomitov 我添加了异常。看来它是为 com.cg.mongo.service.UserRepository 来的。不是吗?
  • @SandunkaMihiran 我修正了我的答案,你必须使用 EnableMongoRepositories 和 maven 才能拥有 spring-boot-starter-data-mongodb

标签: java spring mongodb rest spring-mvc


【解决方案1】:

请仔细阅读您的错误。你的答案在你的 Exception stackTrace()


org.springframework.beans.factory.BeanCreationException:创建名称为userRestController: Injection of autowired dependencies failed的bean时出错;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有com.cg.mongo.service.UserRepositorycom.cg.mongo.controller.UserRestController.repo;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖找到[com.cg.mongo.service.UserRepository] 类型的合格bean:预计至少有1 个bean 有资格作为此依赖的autowire 候选。

不使用自动配置@EnableAutoConfiguration 并且您的配置类中没有@EnableMongoRepositories

谢谢

【讨论】:

    【解决方案2】:

    您没有使用自动配置@EnableAutoConfiguration,并且您的配置类中没有@EnableMongoRepositories,因此您的存储库没有在spring bean中加载,我认为您需要将@EnableMongoRepositories 添加到您的配置类并设置存储库的包名,也用户必须拥有 @Document 和 @Id 而不是 JPA 之一。 并确保你的 maven pom 文件有

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

    【讨论】:

      猜你喜欢
      • 2015-03-03
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2014-11-17
      • 2016-02-23
      相关资源
      最近更新 更多