0
votes

NullPointerException: NULL en essayant de faire un MongoDB FindByID

Donc, j'essaie de connecter Java Spring à mongodb et d'utiliser un EnsachTyID, mais cela donne toujours à l'erreur de pointeur NULL.

package pt.project.ProvaConceito_BackEnd;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProvaConceitoBackEndApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProvaConceitoBackEndApplication.class, args);
    }

}
  • Java
    • mongodb p>

      • MongodService Li>
      • userservice li> ul> li>
      • pojos p>

        • utilisateur li> ul> li>
        • référentiels p>

          • userpository li> ul> li> ul> li> ul>

            Je vais partager le code que j'ai maintenant: p>

            MongodService strong> p>

            UserService userService = new UserService();
            


4 commentaires

Avez-vous essayé d'annoter userservice avec @autowired au lieu de l'instancier avec nouveau userservice () ?


Je viens d'essayer ça et donne la même erreur


N'utilisez pas neuf vous devez l'injecter. Remontez le requis et il ne commencera probablement plus. Placez votre @springbooPlication Classe annotée dans pt.project et redémarrez et maintenant, cela fonctionnera.


@ M.Deinum je l'ai, je viens de modifier le poteau afin que vous puissiez le vérifier


3 Réponses :


0
votes

N'utilisez pas Nouveau pour créer un objet de cette façon, car le ressort n'aura aucune connaissance de cet objet et ne pourra pas l'injecter.

Puisque vous avez déjà annoté le Userservice avec @service vous devez utiliser @autowired annotation xxx

ANNOTTEZ ANNOTATER LE USEREPOSITOIREL classe avec @Repository xxx

supprimer requis = faux de userservice Classe

Assurez-vous d'avoir une classe avec @springbooPlication Annotation dans pt.project.provaconceo_backend package.


4 commentaires

Je viens d'essayer ça et je n'ai pas travaillé, m'a donné la même erreur exacte. Mais je pense que c'est un problème de @Autowired parce que si je supprimais le "Requis = false" de userservice, cela me donne une erreur de compilation: champ userpository dans pt.project.provaconceo_backend.mongodb.uSerservice nécessitait un haricot de type 'pt.project. ProvaconceOtO_Backend.repositories.Serrepositor Y 'qui n'a pas pu être trouvé. Le point d'injection a les annotations suivantes: - @ org.springframework.beans.factory.annotation.Autowired (REQR IRED = vrai)


Annotate The USERPOSITORY Classe avec @Repository et supprimer requis = false


Où avez-vous @springbooTApplication ? Il devrait être sur une classe qui est à pt.project.provaconceo_backend package


Vous avez toujours la même erreur après avoir ajouté @Repository ? Pouvez-vous commettre le code dans certains repo dans Github?



0
votes

Vous devez mettre à jour votre référentiel et utilisateur.class pour avoir un type d'identifiant de chaîne au lieu d'entier. Ceci est requis pour les référentiels de Mongo. Peut ne pas résoudre complètement votre problème mais sera une étape dans la bonne direction

@Repository
public interface UserRepository extends MongoRepository<User, String> {
}


1 commentaires

Merci pour votre réponse, j'ai fait les modifications mais oui, j'ai toujours les mêmes problèmes.



0
votes

Je suivrais les suggestions d'autres contributeurs pour supprimer le mot-clé "Nouveau" de votre MongodService et utilisez aussi l'annotation @Repository.

AutoWiring ne fonctionne que si tous les composants qu'il reposent sont également autonomes. Donc, dans votre cas parce que le MongodService utilise de nouveau pour le userservice, il s'attend à ce que le référentiel utilise "nouveau" aussi. Vous devez à la place AutoWire à tous les niveaux et supprimer le fichier requis = FALSE de la mise en forme de la mise en forme automatique dans les userservice.

Le référentiel requiert l'annotation @Repository, sinon, lorsque le ressort scanne son composant le référentiel ne sera pas ramassé sans elle. @Repository @RestController, etc. Les stéréotypes sont tous des stéréotypes pour @Component avec des degrés divers de fonctionnalités supplémentaires


1 commentaires

De plus, votre constructeur d'utilisateurs n'a pas d'identifiant dedans