I have RestController which look like this:
@RestController
@RequestMapping("/api")
public class SimulationController {
@Autowired
private SimulationRepository simulationRepository;
@PostMapping("/simulations")
public Simulation createSimulation(@Valid @RequestBody Simulation simulation){
simulationRepository.save(simulation);
return simulation;
}
}
I would like to know how can I pass simulation object to other Controller which can process data and save it to other repository. For example it could look like this:
@PostMapping("/simulations")
public Simulation createSimulation(@Valid @RequestBody Simulation simulation){
simulationRepository.save(simulation);
SimulationProcess simulationProcess = new SimulationProcess(simulation);
simulationProcess.simulate();
return simulation;
}
@Controller
public class SimulationProcess {
private Simulation simulation;
@Autowired
private SecondRepository secondRepository;
public SimulationProcess(Simulation simulation) {
this.simulation = simulation;
}
public void simulate(){
// process data from this.simulation
secondRepository.save(new Second(...));
}
}
But I know that this approach is not allowed. Is there any way to do this?
I think you can use a @Service instead of a @Controller in your SimulationProcess class, you can inject it to your first controller and use it, but you can't map requests to a service (I think).
@RestController
@RequestMapping("/api")
public class SimulationController {
@Autowired
private SimulationRepository simulationRepository;
@Autowired
private SimulationProcess simulationProcess;
@PostMapping("/simulations")
public Simulation createSimulation(@Valid @RequestBody Simulation simulation){
simulationRepository.save(simulation);
simulationProcess.simulate(simulation);
return simulation;
}
}
@Service
public class SimulationProcess {
@Autowired
private SecondRepository secondRepository;
public void simulate(Simulation simulation){
// process data from this.simulation
secondRepository.save(simulation);
}
}
I hope it helps. And sorry for any mistakes, english is not my first language :D