2017-08-15 44 views
0

我現在有幾個星期有這個錯誤,我不知道如何解決它。 Stack Overflow的類似解決方案不適合我的項目。創建名爲'mainController'的bean時出錯:通過字段'userRepository'表示的不滿意的依賴關係

我目前使用MySQL數據庫,但遇到這樣的問題時試圖啓動服務器:堆棧跟蹤

[錯誤]未能執行目標org.springframework.boot:彈簧引導行家-plugin:1.5.6.RELEASE:在項目iPbackend上運行(default-cli):運行時發生異常。 null:InvocationTargetException:創建名稱爲'mainController'的bean時出錯:通過字段'userRepository'表示的不滿足的依賴關係;嵌套的異常是org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有可用的bean類型'com.resource.iPbackend.UserRepository'可用:預計至少有1個bean有資格作爲autowire候選者。依賴註解:{@ org.springframework.beans.factory.annotation.Autowired(必需=真)

我用這mainController: MainController.java

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

import com.resource.iPbackend.UserRepository; 
import com.resource.iPbackend.User; 

@Controller 
@RequestMapping(path = "/main") 
public class MainController { 

    @Autowired 
    private UserRepository userRepository; 

    @RequestMapping(path = "/reg", method = RequestMethod.POST) 
    public @ResponseBody String regNewUser (@RequestParam String firstName,  @RequestParam String lastName, @RequestParam String email, @RequestParam String password, @RequestParam String username) { 
     User n = new User(); 
     n.setFirstName(firstName); 
     n.setLastName(lastName); 
     n.setEmail(email); 
     n.setPassword(password); 
     n.setUsername(username); 
     userRepository.save(n); 
     return "User is stored in database: " + n; 
    } 

    @GetMapping(path = "/all") 
    public @ResponseBody Iterable<User> getAllUsers() { 
     return userRepository.findAll(); 
    } 
} 

加上這個倉庫: UserRepository.java

import org.springframework.data.repository.CrudRepository; 
import org.springframework.stereotype.Repository; 
import com.resource.iPbackend.User; 


@Repository 
public interface UserRepository extends CrudRepository<User, Long> { 

} 

而這個實體: User.java

import org.springframework.data.annotation.Id; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
@Entity 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 
    private String firstName; 
    private String lastName; 
    private String email; 
    private String password; 
    private String username; 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer 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 getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 
} 
+2

您沒有任何類實現接口'UserRepository',因此'@ AutoWired'無法在控制器中使用它時初始化實例 –

+2

@TuyenNguyen存儲庫作爲特例處理,因爲它使用' @ Repostory' – Jason

+2

檢查您的配置(基於Java或XML)是否是組件掃描或聲明您嘗試自動裝配的bean。 – Jason

回答

0

您需要包括爲了在基本配置類註釋@EnableJpaRepositories春季數據登記延長CrudRepository如春豆接口。

另外註解@Repository在接口上不做任何事情,所以這不是必須的,但它不會因爲在那裏而破壞任何東西。

編輯:

您也可以嘗試,並通過告訴@EnableJpaRepositories註釋正是您的倉庫是更具體。即:

@EnableJpaRepositories("com.resource.iPbackened") 
+0

註解的類包下的所有包都不起作用。我真的不確定,我的配置類是什麼。我有這個: – justus

+0

@justus我已經編輯了一些更多的細節我的答案 – Plog

+0

@justus如果這不起作用它將很高興看到您的項目結構以及基礎Spring Boot配置類(註釋與'@ SpringBootApplication'或'@ EnableAutoConfiguration') – Plog

0

如果您正在使用Springboot(@SpringBootApplication),則:

嘗試將所有的組件類在同一個(或子女)封裝相對於你的基地Springboot配置類。

比如:

我配置在包com.application 我SpringBoot基配置類;

我在包移動UserRepository(你提到)com.application.resource.iPbackend.User它爲我工作,而不在註釋方面進行任何更改。我沒有錯誤。

既然你還沒有共享你的Springboot配置,所以我假設你將使用默認值。如果解決方案不起作用,請分享您的彈簧啓動配置,我可以嘗試在我身邊並作出迴應。

希望這會有所幫助!

相關問題