开关外壳还是不同的URL?我应该在Springboot Controller中使用什么来调用不同的服务



我正在开发春季启动应用程序,其中我有不同的服务响应单个请求。我正在确定通过从请求获得ServiceID服务的服务。

现在,我正在使用开关案例来识别请求类型和呼叫服务。

@RestController
@RequestMapping("/app")
public class ApiController{
    @Autowired
    Service service;
    @RequestMapping(value = "/service", method = RequestMethod.POST, consumes = { "application/json" })
    public ResponseEntity<ResponseModel> processAPIRequest(@RequestBody ApiRequest req){
        String serviceId = req.getServiceId();
        ResponseModel resp = new ResponseModel();
        switch (serviceId.trim()) {
            case "SER0001":
                resp = service.getDetails01(req);
                break;              
            case "SER0002":
                resp = service.getDetails03(req);
                break;


            case "SER0030":
                resp = service.getDetails30(req);
                break;
        return resp;
    }
}

在上面我应该使用什么才能提高性能?开关案例语句或创建新方法,该方法通过在URL中添加ServiceID来服务于每个请求?例如@RequestMapping(value = "/service/serviceId", method = RequestMethod.POST, consumes = { "application/json" })

首先,控制器方法不得包含逻辑。您必须创建单个方法Service#getDetails

其次,我建议您这样做(例如,返回HTTP 200(:

@PostMapping(value = "/service/{serviceId}")
public ResponseEntity<ResponseModel> processAPIRequest(@PathVariable int serviceId, @RequestBody ApiRequest req) {
    return ResponseEntity.status(HttpStatus.OK).body(service.getDetails(serviceId, req));
}

我还想说,如果您被迫使用英里长的switch,那么您的应用程序的架构有问题。

最新更新