我第一次用spring创建一个web应用程序。
我有两个班,机器和地位。每台机器都有多重状态。
当我为机器创建请求时-没有问题。但我正在尝试创建状态请求,无法使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上的第一篇文章,我希望我没有犯错误。
2条答案
按热度按时间jmp7cifd1#
我想是因为
private MachineRepository machineRepository;
不具备@Autowired
因此注解MachineRepository
spring管理的示例没有被注入,您得到了NullPointerException
.nhaq1z212#