I am creating a web app with Spring for the first time.
I have 2 class, machine and status. Each machines got multiples status.
When I created the requests for the machines - no problems. But I am trying to create the request for the status and I can't manage to make the POST request work.
I linked the status with the machine using @ManyToOne but when i am testing to post a status in a machine Spring returns : 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);
}
}
Thanks to anyone who will try to help me.
This is my first post on stackOverflow I hope I'm not doing mistakes.