3

我正在构建一个安静的服务,它需要接受任意数量的参数,而不是下面示例中的参数。

假设以下服务程序

@RequestMapping("/start/id/{id}", RequestMethod.GET)
public void startService(@PathVariable String id) {...}

有一个基于客户端的实现RestTemplate

restTemplate.getForObject("/start/id/{id}", null, id);

问题:但是考虑到它可能有数千个ids,我必须使用哪些宁静的方法在一个请求中发送所有参数RestTemplate?我看过建议

  • 将请求正文添加到 GET 请求 - 似乎不可能RestTemplate
  • 在 id 中使用分隔符,(例如,id1|id2|....|idn) - 看起来像hack
  • 首先 PUT 参数,然后发出 GET 来引用 id - 双重请求,似乎不直观
  • 添加多个 URL 参数 ( ?id=foo&id=bar&.....&id=foobar)

我知道类似的问题(calling-a-restful-service-with-many-parametershow-to-create-rest-urls-without-verbscan-you-build-a-truly-restful-service-that-takes -many-parameters ) 之前已被问过,但我发现很难找到令人满意的答案,或者至少是基于RestTemplate.

4

2 回答 2

2

我认为 RESTful 设计的任何部分都没有说明您的 url 结构应该能够解析整个集合。您的第一个(请求参数)和第三个(url 参数)建议可能是最好的。

我会推荐第一个。我确定它在resttemplate中是允许的。查看您提供的文档,只需实现其中一种 post 方法。他们每个人都将请求作为参数。在那里,我确信有某种getRequestParameters()方法的实现,您可以使用它从包含您的 id 的请求正文中解析 json/xml。

或者,更好的是,所有这些 id 是如何相关的?他们都有共同的父资源吗?如果是这样,那么您可以(并且可能应该)做类似...

/commonparent/{parentId}

然后在您的请求处理程序中,查询所有 id,然后像往常一样进行。

于 2011-12-20T16:50:38.073 回答
1

您可以对所有 id 使用查询参数:

/search?ids=1,2,3,4,5,6,7

然后用逗号标记并进行搜索。请记住,如果您将其作为 GET 查询字符串参数发出,您将受到最大 URL 长度的限制。

于 2011-12-20T16:46:22.377 回答