У меня 40-45 REST API, созданных с использованием Apache CXF. У меня есть параметр telehpneNumber
, который имеет тип Long
, теперь мне нужно изменить его на String
, но я также хочу, чтобы они были обратно совместимы.
Текущие размышления над этим для создания двух остальных контроллеров, таких как v1
(старый) v2(new) v2 will be accepting
String format. Using adaptor pattern I'll proxy
v1 request to
v2 . But
telephoneNumber param is used in various objects & places. I though of making it as a type of
Object`, но это работает, как и ожидалось, когда речь идет о получении запроса , но это не будет, когда я буду возвращать ответ.
Каким будет правильный подход для решения проблемы обратной совместимости?
В настоящее время мои мысли похожи на то, что написано ниже:
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
Дайте мне знать, что будет лучшим подходом для решения этой проблемы.