当前位置: 首页 > 知识库问答 >
问题:

检索现有Mongo DB集合时给出空指针异常

贺君浩
2023-03-14

我已经创建了一个带有数据的MongoDB,但是当检索特定集合中的所有文档时,我的程序给出了一个空指针异常。

这里是我的代码,userRepository.java

package com.weatherdata.api.dbconnector;

import com.weatherdata.api.users.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

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


package com.weatherdata.api.users;

import com.weatherdata.api.dbconnector.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

public class UserSeeder {
    @Autowired
    UserRepository userRepository;

    public List<User> getAllUsers(){
        List <User> allUsers = this.userRepository.findAll();
        return allUsers;
    }
}

package com.weatherdata.api.users;


import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.HashSet;
import java.util.Set;
@Document(collection = "users")
public class User {
    @Id
    private String id;
    private String username;
    private String email;
    private String mobile;
    private String method;
    private String password;

    @DBRef
    private Set<Role> roles = new HashSet<>();

    public User() {
    }

    public User(String username, String email,String mobile,String method, String password) {
        this.username = username;
        this.email = email;
        this.mobile = mobile;
        this.method = method;
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }
}


但是在rest api中的TIG是相同的函数,运行良好。

这就是我在alert.java中使用UserSedder的方式。

package com.weatherdata.api.filter;

import com.weatherdata.api.users.User;
import com.weatherdata.api.users.UserSeeder;

import java.util.List;

public abstract class Alert implements AlertType {
    private double thresholdValue;
    private List<User> userList;

    @Override
    public double getThreshold() {
        return this.thresholdValue;
    }

    @Override
    public boolean isExceeded(double dataValue) {
        if(thresholdValue < dataValue){
            userList = new UserSeeder().getAllUsers();
            System.out.println(userList.stream().count());
            return true;
        }
        else{
            return false;
        }
    }

    public double getThresholdValue() {
        return thresholdValue;
    }

    public void setThresholdValue(double thresholdValue) {
        this.thresholdValue = thresholdValue;
    }
}

共有1个答案

牟辰龙
2023-03-14

您必须在具有业务逻辑的类上使用SterioType注释@service,在对应用程序或实用程序类的所有层通用的类上使用@component,这是因为当您在主类上注释@springbootapplication时,它具有基础的@componentScan(BasePackages=“主类所在的包名称”),它会自动创建在BasePackage下的类的实例。

 类似资料:
  • DescriptionServer遇到了一个内部错误(),它无法满足此请求。 例外 jasperException:java.lang.NullPointerException根本原因 NullPointerException

  • 以下是在sun.reflect.nativeMethodAccessorImpl.Invoke0(本机方法)在sun.reflect.nativeMethodAccessorImpl.Invoke(未知源)在sun.reflect.NativeMethodAccessorImpl.Invoke(未知源)在java.lang.Reflect.Method.Invoke(未知源)在com.codena

  • 问题内容: 在查询Android日历中的事件之前,我需要检查权限。为此,Android studio警告我在查询之前需要先进行检查。自动生成的代码如下: 尝试运行它时,出现以下错误: 尝试 在空对象引用上调用虚拟方法’int android.content.Context.checkPermission(java.lang.String,int,int)’ 因此很明显,此时某些东西为空,我试图以不

  • 我有一个com。谷歌。云存储Blob对象。我可以在java代码中下载和上传这个对象,但我想在启动进程之前检查一下是否存在某些东西。简而言之,这里是我的代码中给我带来问题的部分。 Eclipse似乎无法在IDE中捕获它。示例似乎也遵循此布局。有人知道发生了什么事吗? 我正在Linux环境机器上运行。(它在云功能方面也失败了)。我正在使用Java 11运行时。

  • > 单击 受保护得空onPrepareDialog(int id,Dialog Dialog) 受保护的对话框onCreateDialog(int id) 如果我对timepickerdialog代码做了什么错误,请告诉我。

  • 问题内容: 我有一个非常简单的应用程序,它只是一个带有选项卡视图的活动。 我已经初始化并将所有内容强制转换为应有的值,但是不断出现空指针错误,该错误始终链接回 tabHost.setup(); 我正在使用android studio,并且是java的新手。这个问题在这里已经问了很多,但所有答案都只是说要包含setup(),而我已经做到了。 这是我的.java文件: 我的代码和一些在线教程之间的唯一