Permettra à l'autowiring :attendre au moins 1 fève qui se qualifie comme autowire candidat à cette dépendance
Bon, je sais qu'il y a beaucoup de questions posées autour du même thème. Mais je ne peux pas semblent faire tout ce travail. Il peut également être le cas que je suis encore à comprendre complètement l'auto concept de câblage.
Mon Problème:
Je suis en mesure d'obtenir à la page voulue, mais à chaque fois que je clique sur un bouton pour effectuer une action-je obtenir exception de pointeur Null ce qui semble évident que je ne pense pas que le printemps est en mesure d'associer correctement les haricots nécessaire.
Donc, quand j'ai ajouter @autocâblés=true , il me donne les données ci-dessus exceptionn.
Je ne suis pas sûr de ce qui doit être fait.. j'Espère que quelqu'un peut m'aider avec ceci. Aimerais une explication bien:)
Code:
@Entity
@Table(name="userDetails")
public class UserDetailModel {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int user_id;
public String password;
public String user_name;
public String active_status;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getActive_status() {
return active_status;
}
public void setActive_status(String active_status) {
this.active_status = active_status;
}
}
Contrôleur:
@RestController
public class UserDetailController {
private Logger logger = (Logger) LoggerFactory.getLogger(UserDetailController.class);
@Autowired(required = true)
private UserRepository userRepository;
@RequestMapping(value="/login", method = RequestMethod.POST)
public @ResponseBody String addNewUser (@RequestBody UserDetailModel user) {
//@ResponseBody means the returned String is the response, not a view name
//@RequestParam means it is a parameter from the GET or POST request
logger.debug("in controller");
UserDetailModel userDtl = new UserDetailModel();
userDtl.setUser_id(user.user_id);
userDtl.setUser_name(user.user_name);
userDtl.setActive_status(user.active_status);
userDtl.setPassword(user.password);
userRepository.save(userDtl);
return "Saved";
}
}
Référentiel:
@Repository
public interface UserRepository extends CrudRepository<UserDetailModel, Long> {}
Trace De La Pile:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDetailController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.springBoot.usl.repo.UserRepository com.springBoot.usl.controller.UserDetailController.userRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.springBoot.usl.repo.UserRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:120)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:683)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:944)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:933)
at com.springBoot.usl.controller.WebAppInitializer.main(WebAppInitializer.java:18)
Résolu sur la base des réponses
Réponse:
J'ai fait quelques modifications en fonction de Jay et Luay réponses. Et changé les annotations comme suit dans mon ApplicationConfig fichier:
@Configuration
@ComponentScan("my.basepackage.*")
@EnableJpaRepositories(basePackages = {"my.basepackage.*"})
@EntityScan("my.basepackage.*")
@EnableAutoConfiguration
Espère que cela aide quelqu'un.
Mais je ne suis pas sûr si * est la bonne façon de faire.
Vous devez vous connecter pour publier un commentaire.
Je suis en mesure d'exécuter votre application avec quelques modifications sur l'annotation côté.
J'ai utilisé les mêmes classes qui sont remis en question. Veuillez voir ci-dessous la structure et de la configuration utilisée.
Structure De Répertoire
J'ai utilisé les paquets ci-dessous et ajouté vos classes,
com.rcmutha.lsu.contrôleur de
com.rcmutha.lsu.référentiel
Pour le code complet :
cliquez ici pour le code
@ComponentScan("x.y.z.controller")
. Changé à@ComponentScan("x.y.z.*")
Je pense que votre application n'est pas en mesure d'analyser le
UserRepository
de la classe, Si vous utilisez le Printemps de Démarrage, alors vous devriez mettre la classe principale sur le dessus de votre colis hiérarchie.Vous devez également utiliser
@EnableJpaRepositories
et dire au package de base de votre repos pour activer le dépôt de la fonctionnalité@EnableJpaRepositories(basePackages ={"com.springBoot.usl.repo"})
entityManagerFactory
dans cet exemple, Cependant, si vous êtes à l'aide de Spring Data JPA avec Spring Boot, vous n'aurez pas besoin de créer un bean de entityManagerFactory printemps fournira un pour vousVous devez activer la JPA des dépôts dans votre config classe, spécifier le package qui contient les référentiels comme ci-dessous
Exemple de ApplicationConfig:
UserRepository
est tout simplement pas défini dans le courant du Printemps Contexte.Assurez-vous que votre classe est définie dans un paquet qui est scanné par le Printemps. Vous aurez besoin d'utiliser
@ComponentScan("org.my.pkg")
dans votre Configuration de la classe pour faire de Printemps de l'analyse du package.Si vous utilisez le Printemps de Démarrage, assurez-vous de localiser votre application principale de la classe qui est annoté avec
@SpringBootApplication
dans un package racine au-dessus des autres classes, car il contient@ComponentScan
.