[SPRING] '필드에서 찾을 수없는 유형의 bean이 필요합니다.' mongodb를 사용하여 오류 봄 편안한 API
SPRING'필드에서 찾을 수없는 유형의 bean이 필요합니다.' mongodb를 사용하여 오류 봄 편안한 API
그래서 나는이 튜토리얼을 따라 일주일에 한 쌍의 봄을 배웠습니다.
RESTful 웹 서비스 빌드하기
내가 몽고 (mongodb)에 그것을 통합하려고 할 때까지 모든 것이 잘되었다. 그래서 나는이 튜토리얼을 따른다.
MongoDB로 데이터 접근하기
하지만 제 연습은 부분적으로 여전히 첫 번째 연습을 사용하고 있습니다. 그래서 내 프로젝트 디렉토리 구조는 이와 같습니다.
src/
├── main/
│ └── java/
| ├── model/
| | └── User.java
| ├── rest/
| | ├── Application.java
| | ├── IndexController.java
| | └── UsersController.java
| └── service/
| └── UserService.java
└── resources/
└── application.properties
이것은 내 model / 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 파일을 실행할 때이 에러가 발생했다.
무엇이 잘못되었는지 확신 할 수 없기 때문에 인터넷 검색을 시작하고 Beans.xml 파일을 포함시키고 userService를 등록해야합니다. 나는 그것을했지만 작동하지 않습니다. 나는이 일에 정말로 익숙하지 않기 때문에 나는 실제로 어떤 일이 일어나고 있는지 전혀 모른다.
해결법
-
==============================
1.그것을 해결했습니다. 따라서 기본적으로 @SpringBootApplication 선언 아래에있는 모든 패키지가 검사됩니다.
그것을 해결했습니다. 따라서 기본적으로 @SpringBootApplication 선언 아래에있는 모든 패키지가 검사됩니다.
@SpringBootApplication 선언이있는 메인 클래스 ExampleApplication이 com.example.something 내부에 선언되어 있다고 가정하면 com.example.something 아래에있는 모든 구성 요소는 com.example.applicant가 검색되지 않는 동안 검색됩니다.
그래서,이 질문에 기초하여 그것을하는 두 가지 방법이 있습니다. 용도
@SpringBootApplication(scanBasePackages={ "com.example.something", "com.example.application"})
그렇게하면 응용 프로그램이 지정된 모든 구성 요소를 검사하지만 규모가 커지면 어떻게 될까요?
그래서 두 번째 접근법을 사용하여 패키지를 재구성하면 효과가 있습니다! 이제 패키지 구조가 이렇게되었습니다.
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
-
==============================
2.service / UserService.java에 @Service를 추가하십시오.
service / UserService.java에 @Service를 추가하십시오.
-
==============================
3.나는 또한 같은 오류가 있었다 :
나는 또한 같은 오류가 있었다 :
*************************** APPLICATION FAILED TO START *************************** Description: Field repository in com.kalsym.next.gen.campaign.controller.CampaignController required a bean of type 'com.kalsym.next.gen.campaign.data.CustomerRepository' that could not be found. Action: Consider defining a bean of type 'com.kalsym.next.gen.campaign.data.CustomerRepository' in your configuration.de here
그리고 내 패키지는 수용된 대답에서 언급 한 것과 같은 방식으로 구성되었습니다. 메인 클래스에서 EnableMongoRepositories 주석을 추가하여 문제를 해결했습니다.
@SpringBootApplication @EnableMongoRepositories(basePackageClasses = CustomerRepository.class) public class CampaignAPI { public static void main(String[] args) { SpringApplication.run(CampaignAPI.class, args); } }
-
==============================
4.동일한 문제가 발생하여 애플리케이션, 패키지 및 도메인 패키지보다 한 수준 높은 패키지에 애플리케이션을 배치해야합니다.
동일한 문제가 발생하여 애플리케이션, 패키지 및 도메인 패키지보다 한 수준 높은 패키지에 애플리케이션을 배치해야합니다.
-
==============================
5.자동 가져 오기 때문에 많은 시간을 보냈습니다. Intellij Idey가 가져온 org.jvnet.hk2.annotations.Service에서 @Service를 가져 왔습니다. import org.springframework.stereotype.Service 대신에!
자동 가져 오기 때문에 많은 시간을 보냈습니다. Intellij Idey가 가져온 org.jvnet.hk2.annotations.Service에서 @Service를 가져 왔습니다. import org.springframework.stereotype.Service 대신에!
-
==============================
6.컨트롤러 클래스에 @Component를 추가하십시오. 이 작품을
컨트롤러 클래스에 @Component를 추가하십시오. 이 작품을
-
==============================
7.일반적으로이 문제는 다음 두 가지 측면에서 해결할 수 있습니다.
일반적으로이 문제는 다음 두 가지 측면에서 해결할 수 있습니다.
그건 그렇고, @Component, @Repository, @Service, @Controller 사이의 차이점에 대한 아주 좋은 설명이 있습니다.
-
==============================
8.이 스레드는 오래되었지만 다른 사람들에게 유용 할 수있는 답변을 올리려고합니다.
이 스레드는 오래되었지만 다른 사람들에게 유용 할 수있는 답변을 올리려고합니다.
나는 같은 문제가 있었다. 다른 모듈에 같은 이름을 가진 다른 클래스가 있다는 것이 밝혀졌습니다. 나는 그 클래스의 이름을 바꾸었고 문제를 해결했다.
-
==============================
9.나는 동일한 문제점을 가지고있다. @EnableMongoRepositories ( "in.topthree.util")
나는 동일한 문제점을 가지고있다. @EnableMongoRepositories ( "in.topthree.util")
package in.topthree.core; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; import in.topthree.util.Student; @SpringBootApplication @EnableMongoRepositories("in.topthree.util") public class Run implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(Run.class, args); System.out.println("Run"); } @Autowired private Process pr; @Override public void run(String... args) throws Exception { pr.saveDB(new Student("Testing", "FB")); System.exit(0); } }
그리고 나의 저장소
package in.topthree.util; import org.springframework.data.mongodb.repository.MongoRepository; public interface StudentMongo extends MongoRepository<Student, Integer> { public Student findByUrl(String url); }
지금은 일하고있다.
-
==============================
10.제 경우에는 클래스 MyprojectApplication을 동일한 수준의 모델, 컨트롤러, 서비스 패키지가있는 패키지 (com.example.start)에 넣었습니다.
제 경우에는 클래스 MyprojectApplication을 동일한 수준의 모델, 컨트롤러, 서비스 패키지가있는 패키지 (com.example.start)에 넣었습니다.
-
==============================
11.필자의 경우, 실수로 복사 및 붙여 넣기를 수행하는 동안 서비스 클래스 추상을 정의했습니다.
필자의 경우, 실수로 복사 및 붙여 넣기를 수행하는 동안 서비스 클래스 추상을 정의했습니다.
@Serivce @Valdiated public abstract class MyService { // remove the abstract modifier!!! }
-
==============================
12.내 대상 폴더의 My Mapper 구현 클래스가 삭제 되었기 때문에 Mapper 인터페이스에는 더 이상 구현 클래스가 없습니다. 따라서 동일한 오류 필드가 *** *** Mapper 찾을 수없는 콩이 필요합니다.
내 대상 폴더의 My Mapper 구현 클래스가 삭제 되었기 때문에 Mapper 인터페이스에는 더 이상 구현 클래스가 없습니다. 따라서 동일한 오류 필드가 *** *** Mapper 찾을 수없는 콩이 필요합니다.
Maven을 사용하여 매퍼 구현을 재생성하고 프로젝트를 새로 고침하기 만하면 ...
-
==============================
13.이것을 사용하여 내 문제를 해결.
이것을 사용하여 내 문제를 해결.
@SpringBootApplication(scanBasePackages={"com.example.something", "com.example.application"})
-
==============================
14.이것은 두 개의 bean이 같은 이름을 가질 때 발생할 수 있습니다.
이것은 두 개의 bean이 같은 이름을 가질 때 발생할 수 있습니다.
Module1Beans.java:
@Configuration public class Module1Beans { @Bean public GoogleAPI retrofitService(){ Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://www.google.com/") .addConverterFactory(JacksonConverterFactory.create()) .build(); return retrofit.create(GoogleAPI.class); } }
Module2Beans.java:
@Configuration public class Module2Beans { @Bean public GithubAPI retrofitService(){ Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://www.github.com/") .addConverterFactory(JacksonConverterFactory.create()) .build(); return retrofit.create(GithubAPI.class); } }
retrofitService라는 이름의 bean이 먼저 생성되고, 유형은 GoogleAPI이며, retrofitService () 메소드에 의해 생성 된 GithubAPI로 덮여 있습니다. 이제 @Autowired GoogleAPI를 사용하면 com.example.GoogleService의 필드 googleAPI와 같은 메시지가 표시되어 'com.example.rest.GoogleAPI'유형의 빈을 찾을 수 없습니다.
from https://stackoverflow.com/questions/42907553/field-required-a-bean-of-type-that-could-not-be-found-error-spring-restful-ap by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 객체 자체에서 AOP 프록시 가져 오기 (0) | 2018.12.12 |
---|---|
[SPRING] Spring에서 필터에 던져진 예외를 관리하는 방법? (0) | 2018.12.12 |
[SPRING] Spring REST 서비스 : 요청에서 JSON 검색하기 (0) | 2018.12.12 |
[SPRING] 스프링 보안 및 @Async (인증 된 사용자가 섞여 있음) (0) | 2018.12.12 |
[SPRING] Spring MVC에서 모든 컨트롤러를 찾는 방법은 무엇입니까? (0) | 2018.12.12 |