简体   繁体   中英

How to call in RestController method from different Controller in Spring?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM