【发布时间】:2020-09-08 03:58:31
【问题描述】:
我需要设计一个 REST api ListMessages 服务(标题、url、内容和发件人中有 4 个字段),该服务应支持同一端点内的两个响应版本。调用者能够定义他可以处理的响应版本。
-
第一个版本返回的消息应该只包含标题、内容和发件人字段。第一个版本不能接受除版本参数之外的任何其他参数。
-
第二个版本返回的消息应该返回所有 4 个字段。第二个版本还带有一个参数,该参数定义返回响应的格式(支持的格式可以是 JSON 和 XML)。
@RequestMapping(value ="/listMessages" , produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
@ResponseBody
public List<?> getAllMessages(@RequestParam Map<String,String> allParams){
if(allParams.get("version").equalsIgnoreCase("v1" ) && allParams.size()==1)
return listMessagesService.getAllMessages();
else if (allParams.get("version").equalsIgnoreCase("v2") && allParams.size()>1)
return listMessagesService.getAllMessagesV2("v2");
return null;
}
这是我的代码。代码可以接受吗?这样设计 API 可以吗?
【问题讨论】:
-
这可以简化,因为大部分问题将由 Spring [为相同的 url 模式创建两个方法](stackoverflow.com/a/15853217/7878602)
标签: java spring-boot rest