2017-08-15 9 views
0

私はこのエラーが数週間続いています。スタックオーバーフローに関する同様のソリューションは私のプロジェクトには適していません。'mainController'という名前のBeanを作成中にエラーが発生しました:フィールド 'userRepository'で表現されている依存関係が未確認です

私は現在、MySQLデータベースを使用しますが、サーバを起動しようとするたびに、この問題が発生しています:のStackTrace

[ERROR]はゴールorg.springframework.bootの実行に失敗しました:春-ブート達人-plugin:1.5.6.RELEASE:プロジェクト(デフォルト - cli)で実行iPbackend:実行中に例外が発生しました。 null:InvocationTargetException: 'mainController'という名前のBeanを作成中にエラーが発生しました:フィールド 'userRepository'で表されている満足度の低い依存関係。ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです: 'com.resource.iPbackend.UserRepository'タイプの適格なBeanはありません:autowire候補と見なされる少なくとも1つのbeanが必要です。依存関係のアノテーション:{@ org.springframework.beans.factory.annotation.Autowired(=真必須)

私はこのメインコントローラを使用しています: このリポジトリと一緒に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

'@ AutoWired'がコントローラでそれを使用しているときにインスタンスを初期化できないように、' UserRepository'を実装しているクラスはありません –

+2

@TuyenNguyenリポジトリは特別なケースとして扱われます。 @ Repostory' – Jason

+2

あなたの設定(JavaまたはXMLベース)がコンポーネントスキャンか、オートワイヤリングしようとしているBeanを宣言していることを確認してください。 – Jason

答えて

0

あなたは春データは春の豆としてCrudRepositoryを拡張インターフェイスを登録するためには、あなたの基本構成クラスの注釈@EnableJpaRepositoriesを含める必要があります。

注釈@Repositoryはインタフェース上で何もしないので、これは必要ではありませんが、そこに存在することで何かを壊すことはありません。

EDIT:

あなたはまた、試してみて、あなたのリポジトリがあり、正確@EnableJpaRepositoriesアノテーションを伝えることで、より具体的にすることができます。すなわち:

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

それはすべて動作しませんでした。私は本当に確かではない、どのような私の構成クラスです。私はこれを持っています: – justus

+0

@justus私は答えを編集しました – Plog

+0

@justusもしそれがうまくいけば、あなたのプロジェクトの構造だけでなく、ベースのスプリングブート設定クラス(アノテーション付き'@ SpringBootApplication'や' @ EnableAutoConfiguration') – Plog

0

あなたがSpringbootを使用している場合( SpringBootApplication @):

同じ(または子)内のすべてのコンポーネントクラスを移動してみてください、あなたのベースSpringbootの設定クラスに比べてパッケージ化します。例えば

私はパッケージcom.application で私SpringBoot基本設定クラスを設定しました。

そして、私はそれが注釈側には何も変更せずに私のために働いたcom.application.resource.iPbackend.UserパッケージにUserRepository(あなたが言及した)を移動しました。私は間違いがない。

あなたはSpringboot Configurationを共有していないので、私はあなたがデフォルトを使用していると仮定しています。ソリューションがうまく動作しない場合は、私の側で試して対応することができます。

希望すると便利です。

関連する問題