Java 需要为不同的api调用相同的控制器方法';s
我有两个APIJava 需要为不同的api调用相同的控制器方法';s,java,rest,spring-boot,design-patterns,code-cleanup,Java,Rest,Spring Boot,Design Patterns,Code Cleanup,我有两个API 1. localhost:8080/myservice/foo/1/0/updatesStatus 2. localhost:8080/myservice/bar/1/0/updatesStatus 我不允许为每个API使用不同的控制器。这两个API都指向同一个控制器方法,我在这里检查了if-else,但是代码看起来很糟糕,有没有更好的方法来处理这个问题 @PostMapping(value = UPDATE_STATUS_API_PATH) public Response u
1. localhost:8080/myservice/foo/1/0/updatesStatus
2. localhost:8080/myservice/bar/1/0/updatesStatus
我不允许为每个API使用不同的控制器。这两个API都指向同一个控制器方法,我在这里检查了if-else,但是代码看起来很糟糕,有没有更好的方法来处理这个问题
@PostMapping(value = UPDATE_STATUS_API_PATH)
public Response updateStatus(@PathVariable("group") String group , @RequestBody UpdateStatusRequest updateStatusRequest, HttpServletRequest request) {
try {
if(APIUrl.FOO_GROUP.equals(group)){
//code spefic to foo
}
else{
//code spefic to bar
}
//common code
}
同样的条件检查也必须在服务层上执行。
是否有任何方法可以避免这种条件检查,而无需使用单独的控制器方法 我能想到这一点
为服务创建一个接口
公共接口更新服务{
作废updateStatus(UpdateStatusRequest UpdateStatusRequest);
}
然后创建不同的实现
公共类FooUpdateService实现UpdateService{
作废updateStatus(UpdateStatusRequest UpdateStatusRequest){
//特定于foo的逻辑
}
}
公共类BarUpdateService实现UpdateService{
作废updateStatus(UpdateStatusRequest UpdateStatusRequest){
//特定于条的逻辑
}
}
创建UpdateServiceFactory
公共类更新服务工厂{
@自动连线
私有更新服务fooUpdateService;
@自动连线
私有更新服务fooUpdateService;
公共更新服务getUpdateService(字符串组){
//将if-else逻辑移到这里
if(apirl.FOO_GROUP.equals(GROUP)){
返回fooUpdateService;
}
否则{
//条码
返回barUpdateService;
}
}
}
控制器:
@PostMapping(值=更新\状态\ API \路径)
公共响应updateStatus(@PathVariable(“group”)字符串组,@RequestBody UpdateStatusRequest UpdateStatusRequest,HttpServletRequest){
updateServiceFactory.getUpdateService(组).updateStatus(updateStatusRequest);
//通用代码
}
什么是不允许?谁干的?这是家庭作业吗?这是一个坏主意,你实际上想做的是为内部层“排序api网关”,如果你真的想这样做(没有任何设计)使用对象作为请求主体,然后根据条件更新条目列表vs single
将在热修复中为你节省很多,但不会推荐