如何合并两个具有不同输入参数和输出值的外部API?他们希望新的合并控制器向后兼容。我不相信它可以查看现有代码。我认为有人必须改变输入和结果
package package1
@ResponseBody
@RequestMapping(method = RequestMethod.POST)
public class SearchController {
public ResponseEntity<String> request(@RequestBody String jsonSearch) {
Search1 search = gson.fromJson(jsonSearch, Search1.class);
List<Result1> results = search(search);
return renderSuccess(results);
}
public static List<Result1> search(Search1 search) {....}
}
public class Search1 {
private Calendar date;
private Foo foo
}
public class Result1 {
private Bar foo;
}
package package2
@RequestMapping(method = RequestMethod.POST)
public class SearchRestful {
public ResponseEntity<Bar> request(@RequestBody String jsonSearch2, @RequestParam(value = "limit") int limit) {
Search2 search2 = gson.fromJson(jsonSearch2, Search2.class);
Search1 search1 = transform(search2);
// Yes it really calls the search in the other package
List<Result1> results = SearchController.search(search1);
List<Result2> results2 = transformResults(results);
List<Result2> filteredResults2 = filter(results2, limit);
return renderSuccess(filteredResults2);
}
}
public class Search2 {
private Date date;
private String foo
}
public class Result2 {
private Foo foo;
}
我需要在不同的包中创建一个新的
package package3
@ResponseBody
@RequestMapping(method = RequestMethod.POST)
public class SearchController {
// ?????
}
我应该使用多种方法为大约8个不同的控制器执行此操作。关于如何合并并保持向后兼容性的任何想法?他们想要弃用旧的并开始使用新的组合。它仅由我公司创建的应用程序使用,目前没有外部客户端应用程序使用api,但我相信他们想要这就是为什么他们希望清理它。
我告诉我的老板我们应该创建一个新的,修复所有在两者中完成的奇怪事情但不尝试使package3向后兼容两者。弃用package1和package2(保留它但不再更新)并告诉人们他们是否需要更改,他们必须移动到package3并且只让新应用程序连接到package3。
答案 0 :(得分:0)
只需按原样保留旧的控制器,并添加具有不同端点的新控制器。
编辑:您可以通过将参数限制设置为不需要来合并这两种方法,并使用框装整数键入它:
@RequestParam(value =“limit”,required = false)整数限制
这样,您可以检查何时设置限制,如果是,则SearchRestful,否则SearchController行为。但是上帝,这段代码真是废话,需要一个好的重构。 :(