如何变更API端点并保留旧端点的可用状态?
实现新旧API端点共存的方案
针对你需要同时保留旧API端点(/home/download)和新端点(/home/document/download)的需求,这里有几个简单直接的实现方案:
方案一:控制器上同时配置新旧基础路径
直接在DocumentController的@RequestMapping注解中添加旧的基础路径,让控制器同时响应两个前缀下的请求:
class Endpoints { public static final DOCUMENT_HOME = "/home/document"; public static final OLD_DOCUMENT_HOME = "/home"; public static final DOWNLOAD = "/download"; } @RequestMapping(value = {Endpoints.OLD_DOCUMENT_HOME, Endpoints.DOCUMENT_HOME}) class DocumentController { @GetMapping(value = Endpoints.DOWNLOAD) public void download(); }
这样配置后,/home/download(旧端点)和/home/document/download(新端点)都会映射到同一个download方法,完美实现共存。
方案二:给方法配置多个映射路径
如果不想修改控制器的基础路径,也可以直接在download方法上同时指定完整的新旧端点路径:
class Endpoints { public static final DOCUMENT_HOME = "/home/document"; public static final DOWNLOAD = "/download"; public static final OLD_DOWNLOAD_FULL_PATH = "/home/download"; } @RequestMapping(Endpoints.DOCUMENT_HOME) class DocumentController { @GetMapping(value = {Endpoints.DOWNLOAD, Endpoints.OLD_DOWNLOAD_FULL_PATH}) public void download(); }
这种方式更灵活,适合只需要保留单个方法旧端点的场景。
方案三:添加重定向控制器(推荐用于过渡阶段)
如果希望逐步引导用户切换到新端点,可以专门写一个处理旧端点的控制器,将请求重定向到新端点:
@RequestMapping("/home") class OldDocumentRedirectController { @GetMapping("/download") public String redirectToNewDownload() { return "redirect:/home/document/download"; } }
这样用户访问旧端点时会自动跳转到新端点,既保证了兼容性,又能让调用方逐步迁移到新路径。
内容的提问来源于stack exchange,提问作者RAHUL VISHWAKARMA
相关产品推荐
相关产品推荐

