I am getting the following error:
*************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of method setApplicant in webService.controller.RequestController required a bean of type 'com.service.applicant.Applicant' that could not be found. Action: Consider defining a bean of type 'com.service.applicant.Applicant' in your configuration.
I have never seen this error before but it’s odd that the @Autowire is not working. Here is the project structure:
Applicant Interface
public interface Applicant { TApplicant findBySSN(String ssn) throws ServletException; void deleteByssn(String ssn) throws ServletException; void createApplicant(TApplicant tApplicant) throws ServletException; void updateApplicant(TApplicant tApplicant) throws ServletException; List<TApplicant> getAllApplicants() throws ServletException; }
ApplicantImpl
@Service @Transactional public class ApplicantImpl implements Applicant { private static Log log = LogFactory.getLog(ApplicantImpl.class); private TApplicantRepository applicantRepo; @Override public List<TApplicant> getAllApplicants() throws ServletException { List<TApplicant> applicantList = applicantRepo.findAll(); return applicantList; } }
Now I should be able to just Autowire Applicant and be able to access, however in this case it is not working when I call it in my @RestController:
@RestController public class RequestController extends LoggingAware { private Applicant applicant; @Autowired public void setApplicant(Applicant applicant){ this.applicant = applicant; } @RequestMapping(value="/", method = RequestMethod.GET) public String helloWorld() { try { List<TApplicant> applicantList = applicant.getAllApplicants(); for (TApplicant tApplicant : applicantList){ System.out.println("Name: "+tApplicant.getIndivName()+" SSN "+tApplicant.getIndSsn()); } return "home"; } catch (ServletException e) { e.printStackTrace(); } return "error"; } }
————————UPDATE 1———————–
I added
@SpringBootApplication @ComponentScan("module-service") public class WebServiceApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(WebServiceApplication.class); } public static void main(String[] args) { SpringApplication.run(WebServiceApplication.class, args); } }
and the error went away but nothing happened. However when I commented out everything dealing with Applicant
in the RestController
prior to adding @ComponentScan()
I was able to return a string the UI
, thus meaning my RestController
was working, now it is being skipped. I ugly Whitelabel Error Page
now.
———————UPDATE 2——————————
I added the base package of the bean it was complaining about. Error reads:
*************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of method setApplicantRepo in com.service.applicant.ApplicantImpl required a bean of type 'com.delivery.service.request.repository.TApplicantRepository' that could not be found. Action: Consider defining a bean of type 'com.delivery.request.request.repository.TApplicantRepository' in your configuration.
I added @ComponentScan
@SpringBootApplication @ComponentScan({"com.delivery.service","com.delivery.request"}) public class WebServiceApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(WebServiceApplication.class); } public static void main(String[] args) { SpringApplication.run(WebServiceApplication.class, args); } }
—————————-Update 3———————-
adding:
@SpringBootApplication @ComponentScan("com") public class WebServiceApplication extends SpringBootServletInitializer {
still is complaining about my ApplicantImpl
class which @Autowires
my repo TApplicantRepository
into it.
Advertisement
Answer
It might be because the project has been broken down into different modules.
@SpringBootApplication @ComponentScan({"com.delivery.request"}) @EntityScan("com.delivery.domain") @EnableJpaRepositories("com.delivery.repository") public class WebServiceApplication extends SpringBootServletInitializer {