java如何支持RESTAPI中参数类型的向后可比性
我已经使用ApacheCXF框架构建了40-45个RESTAPI。我确实有一个参数telehpneNumber
,它的类型是Long
。现在我需要将其更改为String
,但也希望这些参数应该是向后兼容的
当前的想法是创建两个rest控制器,比如v1
(old)v2(new) v2 will be accepting
Stringformat. Using adaptor pattern I'll proxy
v1request to
v2. But
电话号码param is used in various objects & places. I though of making it as a type of
对象`但在接收请求时,它会像预期的那样工作,但在我返回响应时它不会工作
解决这种向后forawrd兼容性问题的正确方法是什么
目前,我的想法类似于以下代码:
class OldTelephoneRequest{
Long telephoneNumber;
//some more variables
//getters & setters
}
class TelephoneRequest{
String telephoneNumber;
//some more variables
//getters & setters
}
@Path("/rest/services/v1")
class OldRestAPI{
@Path("telephoneDetails")
public Response telephoneDetails(OldTelephoneRequest oldTelephoneRequest){
//make proxy call to v2 which will accept telephoneRequst object
//Convert telephoneRequst to newTelephoneRequst(which will have telephoneNumber as String )
TelephoneRequest request=new TelephoneRequest(oldTelephoneRequest);
return RestAPI.telephoneDetails(telephoneRequest)
}
}
@Path("/rest/services/v2")
class RestAPI{
@Path("telephoneDetails")
public Response telephoneDetails(TelephoneRequest telephoneRequest){
//business logic
}
}
上面的方法有一个问题,就是我必须为每个请求构造40-45个构造函数,基本上将从oldRequest
转换为newRequst
让我知道解决这个问题的更好方法是什么
# 1 楼答案
最干净的解决方案是让设计保持原样,让MapStruct为您进行映射:
有关更多信息: http://mapstruct.org/