切换大小写还是使用其他网址?我应该在Springboot控制器中使用什么来调用不同的服务

时间:2019-06-25 12:33:46

标签: java spring spring-boot spring-mvc

我正在开发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" })

1 个答案:

答案 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,那么您的应用程序体系结构就会出问题。