java.lang.NullPointerException:调用存储库时为null

时间:2019-10-22 19:02:43

标签: java spring-boot autowired

下午好,我在这里尝试执行的操作是通过CUSPP验证是否有一个对象将成为我的ID,但是此验证是在@Controller外部完成的,因此我想在AffiliateActiveV中进行该操作,然后通过AfiliadoActivoV obj = new AfiliadoActivoV()调用它,然后用数据AfiliadoActivoV(cuspp)填充它。

我需要在@Controller类之外进行验证,因为SonarLint告诉我该类太大了。

AfiliadoActivoRepository

@Repository
public interface AfiliadoActivoRepository extends CrudRepository<AfiliadoActivoEntity, String> {
}

AfiliadoActivoController

@RestController
@CrossOrigin(origins = "*")
public class CargaArchivoController {
        @GetMapping(path = "/leertxt")
    public @ResponseBody String leerArchivo() {
        AfiliadoActivoV obj = new AfiliadoActivoV();
       return obj.validacionCampos(item.cuspp) //This value comes from a reading made to a csv file - I have validated with a System.out.Print and if it has data
    }
}

AfiliadoActivoV

public class AfiliadoActivoV {

    @Autowired
    AfiliadoActivoRepository crudAfiliadoActivo2;

public String validacionCampos(String cuspp) {
    String respuesta="";
    if(crudAfiliadoActivo2.existsById(cuspp)==true) {
         respuesta= respuesta + " Error: CUSPP Duplicado";
    }
}}

我附上了STS控制台中出现的错误 enter image description here

1 个答案:

答案 0 :(得分:0)

它只是一个空指针这一事实告诉您Spring甚至没有尝试找到要在此处注入的bean。 Spring会告诉您是否尝试注入@Autowired但找不到匹配的bean。

这意味着AfiliadoActivoV不会被Springs Component-Scanning收集到,它会收集所有可使用CDI的类。

  1. 使用@Component@Service

    注释您的班级
    @Component
    public class AfiliadoActivoV {
    
  2. 确保在组件扫描期间可以找到该类。 如果您依赖于基于注释的配置,则您有一个用@SpringBootApplication进行注释的类。默认情况下,SpringBoot将仅扫描此目录和Bean类的所有子目录。

我想您的@SpringBootApplication类位于AfiliadoActivoV的子目录或兄弟目录中。

在这种情况下,您可以修改您的类结构或使用@ComponentScan("...")