[解決済み] Field required a bean of type that couldn't be found." エラー spring restful API using mongodb
質問
この一週間でSpringを学び、このチュートリアルに従いました。
mongodbに統合しようとするまでは、すべてが順調でした。そこで、私はこのチュートリアルに従いました。
しかし、私の実務は部分的にまだ最初のものを使っています。なので、私のプロジェクトのディレクトリ構成はこんな感じです。
src/
├── main/
│ └── java/
| ├── model/
| | └── User.java
| ├── rest/
| | ├── Application.java
| | ├── IndexController.java
| | └── UsersController.java
| └── service/
| └── UserService.java
└── resources/
└── application.properties
これは私の モデル/User.java ファイル
package main.java.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="user")
public class User {
private int age;
private String country;
@Id
private String id;
private String name;
public User() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
これは私の rest/UsersController.javaです。 ファイル
package main.java.rest;
import java.util.List;
import main.java.service.UserService;
import main.java.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/users")
public class UsersController {
@Autowired
UserService userService;
@RequestMapping(method = RequestMethod.GET)
public List<User> getAllUsers() {
return userService.findAll();
}
}
これは私の service/UserService.java です。 ファイル
package main.java.service;
import java.util.List;
import main.java.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserService extends MongoRepository<User, String> {
public List<User> findAll();
}
コンパイルはできたのですが(チュートリアルに沿っているのでコンパイルにはgradleを使っています)、jarファイルを実行するとこのようなエラーを吐いていました。
アプリケーションの起動に失敗しました
説明
main.java.rest.UsersController のフィールド userService には、'main.java.service.UserService' 型の bean が必要ですが、見つかりません。 type 'main.java.service.UserService' が必要ですが、見つかりませんでした。
アクションを実行します。
設定に 'main.java.service.UserService' タイプのビーンを定義することを検討してください。 を定義することを検討してください。
何が間違っているのか分からないので、ググってみると、以下のように
Beans.xml
ファイルをインクルードし、userServiceをその中に登録する必要があることを知りました。私はそれをやったが、それは動作していません。私はこれに本当に新しいですので、私は本当に何が起こっているかについての手がかりを持っていません。
どのように解決するのですか?
解決しました。というわけで、デフォルトでは、すべてのパッケージが
@SpringBootApplication
宣言に該当するすべてのパッケージがスキャンされます。
私のメインクラスと仮定すると
ExampleApplication
があり
@SpringBootApplication
の中で宣言されています。
com.example.something
の中に宣言されている場合、その下にあるすべてのコンポーネントは
com.example.something
に該当するすべてのコンポーネントがスキャンされ、その間に
com.example.applicant
はスキャンされません。
ということで、これを元に2つの方法があります。 質問 . 使用する
@SpringBootApplication(scanBasePackages={
"com.example.something", "com.example.application"})
この方法では、アプリケーションは指定されたすべてのコンポーネントをスキャンしますが、私はスケールが大きくなっている場合はどうでしょうか?
そこで、パッケージを再構築することで2番目のアプローチをとってみたところ、うまくいきました! 私のパッケージの構造は次のようになりました。
src/
├── main/
│ └── java/
| ├── com.example/
| | └── Application.java
| ├── com.example.model/
| | └── User.java
| ├── com.example.controller/
| | ├── IndexController.java
| | └── UsersController.java
| └── com.example.service/
| └── UserService.java
└── resources/
└── application.properties
関連
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
final, finally, finalizeの違いについて話してください。
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
プロジェクトの依存関係を解決できなかった 解決
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
Spring boot runs with Error creating bean with name 'entityManagerFactory' defined in class path resource
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
自動配線された依存性のインジェクションに失敗しました。
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
java 例外。Javaツールの初期化
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
[解決済み】設定に「package」型のBeanを定義することを検討する【Spring-Boot】。
-
undefinedeclipse エラー。この行に複数のアノテーションが見つかりました: - 文字列を型解決に解決できない
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
final, finally, finalizeの違いについて話してください。
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
このラインで複数のマーカーを解決する方法