MongoDb春季启动,找不到用户实体

时间:2018-08-25 10:06:05

标签: java spring spring-boot

我正在使用MongoDb,在我的春季启动项目中,这是我的实体用户

package com.logan.cricketbeting.entities;

import java.util.Date;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "users")
public class User {
    @Id
    private String id;
    private String username;
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
    }
    private String password;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }


}

这是用户存储库

package com.logan.cricketbeting.repositories;

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;

import com.logan.cricketbeting.entities.User;
//this is the repositiory for users
@Repository
public interface UserRepository extends MongoRepository<User, String> {
    @Query
    public User findByUsername(String username);

}

这是Userservice

package com.logan.cricketbeting.Service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.logan.cricketbeting.entities.User;

@Service
public interface UserService {
    User saveUser(User User);
    User updateUser(User User);
    void deleteUser(User User);
    User getUserByusername(String username);
    List<User> getAllUsers();


}

用户服务Impl

package com.logan.cricketbeting.Service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.logan.cricketbeting.entities.User;
import com.logan.cricketbeting.repositories.UserRepository;



public class UserServiceImpl implements UserService {


    @Autowired
    private UserRepository userRepository;
    @Override
    public User saveUser(User User) {
        // TODO Auto-generated method stub
        return userRepository.save(User);

    }

    @Override
    public User updateUser(User User) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void deleteUser(User User) {
        // TODO Auto-generated method stub

    }

    @Override
    public User getUserByusername(String username) {
        // TODO Auto-generated method stub
        return userRepository.findByUsername(username);
    }

    @Override
    public List<User> getAllUsers() {
        // TODO Auto-generated method stub
        return null;
    }



}

这是我的索引控制器

package com.logan.cricketbeting.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.logan.cricketbeting.Service.UserServiceImpl;
import com.logan.cricketbeting.entities.User;

@Controller

public class IndexController {

    @Autowired
    private User user;

    @Autowired
    private UserServiceImpl userservice;

    @RequestMapping("/login")
    public String login()
    {
        return "user/login";
    }

    @RequestMapping("/home")
public String index() {
    return "user/home.html";
}
    @RequestMapping("/aboutus")
    public String aboutus()
    {
        return "user/about-us";
    }

    @RequestMapping("/faqs")
    public String faqs()
    {
        return "user/faqs";
    }
    @RequestMapping("/register")
    public String register()
    {
        return "user/register";
    }
    @RequestMapping("/contactus")
    public String contactus()
    {
        return "user/contact-us";
    }
    @RequestMapping("/extra-menu")
    public String extramenu()
    {
        return "extra-menu";
    }

    @RequestMapping("/register")
    @ResponseBody
    public String registers()
    {
        user.setUsername("logan");
        user.setPassword("password");
        userservice.saveUser(user);

        return "User registered";
    }
}

这是我的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.logan.cricketbeting</groupId>
    <artifactId>cricketbettingspring</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>cricketbettingspring</name>
    <description>cricketbettingspring</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.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>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-jasper</artifactId>
  </dependency>
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

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

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


</project>

我收到此错误

  

说明:

     

com.logan.cricketbeting.controllers.IndexController中的字段用户   需要“ com.logan.cricketbeting.entities.User”类型的Bean   找不到。

     

操作:

     

考虑定义一个类型的bean   配置中的“ com.logan.cricketbeting.entities.User”。

我已经创建了带有@Document批注的实体,但是它仍然给我这个错误,不知道如何解决它?

2 个答案:

答案 0 :(得分:0)

您要尝试的是在User中注入IndexController

@Autowired
private User user;

用户不是由Spring IoC管理的bean,因此您会收到此错误:

Field user in com.logan.cricketbeting.controllers.IndexController required a bean of type 'com.logan.cricketbeting.entities.User' that could not be found.

解决方案:

只需在User方法中以及您需要的任何地方实例化您的registers()

@RequestMapping("/register")
@ResponseBody
public String registers() {
    User user = new User();
    user.setUsername("logan");
    user.setPassword("password");
    userservice.saveUser(user);

    return "User registered";
}

答案 1 :(得分:0)

您可以通过以下方式注释您的用户实体

  

@Component

,您需要做的就是让Spring ApplicationContext找到它。喜欢

@Component
@Document(collection = "users")
public class User {
    @Id
    private String id;
    private String username;
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
    }
    private String password;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }


}