我正在尝试使用Hibernate和REST -API构建Spring-boot
CRUD应用程序。但是,当我尝试运行应用程序时,一切正常,但控制台显示以下错误
java.lang.NullPointerException: null
at io.javabrains.EmployerController.getAllEmployers(EmployerController.java:20) ~[classes/:na]
我尝试更改值,但没有成功
EmployerService.java
package io.javabrains;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Service;
import io.javabrains.Entity.Employer;
@Service
public class EmployerService {
private Repository repository;
public List<Employer>getAllEmployers(){
List<Employer>employers = new ArrayList<>();
repository.findAll()
.forEach(employers::add);
return employers;
}
public void addEmployer(Employer employer) {
repository.save(employer);
}
}
EmployerController.java
package io.javabrains;
import java.util.List;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import io.javabrains.Entity.Employer;
@RestController
public class EmployerController {
private EmployerService service;
@RequestMapping("/employer")
public List<Employer>getAllEmployers()
{
return service.getAllEmployers();
}
/*
* @RequestMapping("/employer/{id}") public Employer getEmployer(@PathVariable
* int id) { return service.getEmployer(id); }
*/
@RequestMapping(method=RequestMethod.POST,value="/employer/create")
public void addEmployer(@RequestBody Employer employer) {
service.addEmployer(employer);
}
}
....
5条答案
按热度按时间gwbalxhn1#
在分析给出的代码片段时,由于您的代码没有要求Spring依赖项注入器将
EmployerService
作为EmployerController
的依赖项注入,因此发生了空指针异常。因此它不会将EmployerService
bean类注入到引用private EmployerService employerService;
中,因此它在EmployerController
中为空。您可以通过在EmployerController
中添加@Autowire
注解private EmployerService service;
引用来请求Spring依赖关系注入器注入依赖关系将您的
EmployerService
更新为以下内容即可此外,当尝试访问
repository
时,Service
中也会出现同样的问题。更新
EmployeeService.java
代码,包括@autorwired
逻辑:vpfxa7rd2#
这意味着您创建了一个EmployeerService的引用变量,而不是EmployeerService的对象。这可以通过使用
new
关键字来完成。但是正如您所知,Spring Container使用DI(依赖关系注入)来管理Bean(对象,在上面的例子中,对象是EmployeerService),所以对象示例化和对象的整个生命周期都由Spring管理。为此,我们必须说明此对象应由Spring管理,这是通过使用@Autowired
注解完成的。hfyxw5xn3#
使用前需要获取仓库的对象,为此添加@Autowired on
在你的雇主服务课上。
kpbpu0084#
@Autowired绝对是解决方案。
但是你的服务类,如果你要求你的REPOSITORY,你也应该放在那里。
所以在我的问题中,解决方案是
还有
bf1o4zei5#
在抛出NullpointerException的方法中有一行代码,然后我将该行代码放入if语句中,它就无缝地为我工作了。例如:
if (user != null) { application.setEmailaddress(user.getEmail());}