我正在开发Spring Boot应用程序,其中我有不同的服务来响应单个请求。我正在通过从请求中获取serviceId来识别服务于请求的服务。
现在我正在使用Switch case来识别请求类型并相应地调用服务。
@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" })
答案 0 :(得分:1)
首先,控制器方法不得包含逻辑。您必须创建单个方法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
,那么您的应用程序体系结构就会出问题。