我正在开发春季启动应用程序,其中我有不同的服务响应单个请求。我正在确定通过从请求获得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
,那么您的应用程序的架构有问题。