java - 发布请求返回 java.lang.NullPointerException
问题描述
我第一次使用Spring创建一个 Web 应用程序。
我有 2 类,机器和状态。每台机器都有多个状态。
当我为机器创建请求时 - 没有问题。但我正在尝试创建状态请求,但无法使POST请求工作。
我将状态与使用的机器联系起来,@ManyToOne
但是当我测试在机器中发布状态时,Spring返回:java.lang.NullPointerException: Cannot invoke "com.example.DCT.repository.MachineRepository.findById(Object)" because "this.machineRepository" is null
@Entity
public class Status {
@Id
private Long id;
private String name;
private Boolean state;
@ManyToOne
private Machine machine;
public Machine getMachine() {
return machine;
}
public void setMachine(Machine machine) {
this.machine = machine;
}
public Status() {
}
public Status(Long id, String name, Boolean state,Machine machine){
this.id = Long.valueOf(id);
this.name = name;
this.state = state;
this.machine = machine;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getState() {
return state;
}
public void setState(Boolean state) {
this.state = state;
}
@Service
public class StatusServiceImpl {
StatusRepository statusRepository;
public List<Status> getAllStatus(Long machineId){
List<Status> status =new ArrayList<>();
statusRepository.findByMachineId(machineId)
.forEach(status::add);
return status;
}
public Optional<Status> getStatus(Long statusId) {
return statusRepository.findById(statusId);
}
public void addStatus(Status status) {
statusRepository.save(status);
}
public void updateStatus(Status status) {
statusRepository.save(status);
}
public void deleteStatus(Long id) {
statusRepository.deleteById(id);
}
}
@RestController
public class StatusControllerImpl {
@Autowired
private StatusServiceImpl statusServiceImpl;
private MachineRepository machineRepository;
@GetMapping("/machines/{machineId}/status")
public List<Status> getAllStatus(@PathVariable Long machineId){
return statusServiceImpl.getAllStatus(machineId);
}
@GetMapping("/machines/{machineId}/status/{statusId}")
public Optional<Status> getStatus(@PathVariable Long statusId){
return statusServiceImpl.getStatus(statusId);
}
@RequestMapping(method=RequestMethod.POST, value="/machines/{machineId}/status")
public void addStatus(@RequestBody Status status, @PathVariable Long machineId) {
status.setMachine(machineRepository.findById(machineId).get());
statusServiceImpl.addStatus(status);
}
@PutMapping("/machines/{machineId}/status/{statusId}")
public void updateStatus(@RequestBody Status status,@PathVariable Long statusId, @PathVariable Long machineId) {
status.setMachine(machineRepository.findById(machineId).get());
statusServiceImpl.updateStatus(status);
}
@RequestMapping(method=RequestMethod.DELETE, value="/machines/{machineId}/status/{statusId}")
public void deleteStatus(@PathVariable Long statusId) {
statusServiceImpl.deleteStatus(statusId);
}
}
感谢任何愿意帮助我的人。
这是我在 stackOverflow 上的第一篇文章,希望我没有犯错。
解决方案
@Autowired
private StatusServiceImpl statusServiceImpl;
@Autowired
private MachineRepository machineRepository;
@RequestMapping(method=RequestMethod.POST,
value="/machines/{machineId}/status")
public void addStatus(@RequestBody Status status, @PathVariable Long machineId)
{
if(machineRepository.findById(machineId).get()!=null)
status.setMachine(machineRepository.findById(machineId).get());
statusServiceImpl.addStatus(status);
}
推荐阅读
- r - 如何使用 R 查找 n-gram 的频率并在 wordcloud 中将其可视化?
- javascript - 传单中的上下文菜单项
- angular - 如何在 Angular 4 中的 http 请求中添加基本身份验证
- excel - 使用 B 列数据将 A 列数据连接到 C 列
- design-patterns - 阅读经典书籍设计模式时的一个问题:可重用面向对象软件的元素
- r - 如何在 R 中生成 Kmeans 聚类图的成对图?
- javascript - 将对象数组合并为一个对象 - 对象具有相同的名称属性
- sql - 请帮助我使用雪花中的 regexp_substr
- windows - Flutter pub 在错误的目录中运行?
- vba - 我正在personal.xlsb中编写一个事件代码来在单元格内进行拼写检查