我正在构建一个宁静的服务,需要接受任何数量的参数,而不是下面示例中的 one 。
假设以下服务程序
@RequestMapping("/start/id/{id}", RequestMethod.GET)
public void startService(@PathVariable String id) {...}
有一个基于RestTemplate
restTemplate.getForObject("/start/id/{id}", null, id);
问题但鉴于可能有数千ids
,我需要使用RestTemplate
在一个请求中发送所有参数的其他方法吗?我见过这些建议
RestTemplate
似乎无法实现?id1|id2|....|idn
) - 看起来像 hack ?id=foo&id=bar&.....&id=foobar
)我之前已经问过类似的问题(calling-a-restful-service-with-many-parameters,how-to-create-rest-urls-without-verbs,can-you-build-a-truly-restful-service-that-takes-many-parameters),但我发现很难找到满意的答案,或者至少基于{{{ 3}}。
答案 0 :(得分:2)
我认为RESTful设计的任何部分都没有声明您的url结构应该能够解析整个集合。您的第一个(请求参数)和第三个(url参数)建议可能是最好的。
我会推荐第一个。我确信它允许重新模板。查看您提供的文档,只需实现一种post方法。他们每个人都将请求作为参数。在那里,我确信有一种getRequestParameters()
方法的实现,你可以用它来解析包含你的id的请求体中的json / xml。
或者,更好的是,所有这些id如何相关?他们都有共同的父资源吗?如果是这样,那么你可以(并且可能应该)做类似的事情......
/commonparent/{parentId}
然后在你的请求处理程序中,查询所有id,并按正常方式进行。
答案 1 :(得分:1)
您可以对所有ID使用查询参数:
/search?ids=1,2,3,4,5,6,7
然后用逗号进行标记并进行搜索。请记住,如果您将其作为GET查询字符串参数发出,则您将受到最大URL长度的限制。