有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Spring中从不同的控制器调用RestController方法?

我有一个RestController,看起来像这样:

@RestController
@RequestMapping("/api")
public class SimulationController {

@Autowired
    private SimulationRepository simulationRepository;

@PostMapping("/simulations")
    public Simulation createSimulation(@Valid @RequestBody Simulation simulation){
        simulationRepository.save(simulation);
       
        return simulation;

    }
}

我想知道如何将模拟对象传递给其他控制器,该控制器可以处理数据并将其保存到其他存储库。例如,它可能看起来像这样:

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

但我知道这是不允许的。有没有办法做到这一点


共 (1) 个答案

  1. # 1 楼答案

    我认为您可以在模拟过程类中使用@Service而不是@Controller,您可以将它注入到第一个控制器并使用它,但您不能将请求映射到服务(我认为)

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

    我希望有帮助。对不起,我犯了错误,英语不是我的第一语言