首页 > 解决方案 > 发布请求返回 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 上的第一篇文章,希望我没有犯错。

标签: javaspringrest

解决方案


@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);
    }

推荐阅读