【问题标题】:RESTful Spring service with multiple parameters具有多个参数的 RESTful Spring 服务
【发布时间】:2011-12-20 16:32:10
【问题描述】:

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

假设以下服务例程

@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
  • 先输入参数,然后发出 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 的答案。

【问题讨论】:

    标签: java spring url rest resttemplate


    【解决方案1】:

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

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

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

    /commonparent/{parentId}
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多