【问题标题】:how to pass several parameters in get request如何在get请求中传递几个参数
【发布时间】:2020-08-20 04:29:06
【问题描述】:

我正在尝试检查我的方法是否通过 API 起作用

   @GetMapping(value = "/ads/in/rubrics/{ids}")
        public List<Ad> findAllAdInRubricByIds(@PathVariable("ids") List<Integer> ids) {
            return adService.findAllAdInRubricByIds(ids);
        }

如何在获取请求中设置一些参数? 我就是这样尝试的

http://localhost:9999/mvc/ad/ads/in/rubrics/ids&ids=1&ids=2
http://localhost:9999/mvc/ad/ads/in/rubrics/ids&ids1=1&ids2=2

总是收到错误 400 Bad Request

【问题讨论】:

  • 一般来说,如果你想获取多个值,你会使用查询参数,而不是路径变量。 (这是 HTTP 语义的问题,而不是 Spring MVC 的问题。)
  • 这能回答你的问题吗? How do I pass multiple parameter in URL?

标签: java rest api


【解决方案1】:

您将 PathVariables 与 RequestParams 混淆了。

PathVariable 是请求路径中的变量。它不需要是最后一个字符。

@GetMapping("/api/{version}/foo/{idFoo}")
public Void getFooNumber(@PathVariable("version") Integer version, @PathVariable("idFoo") Integer idFoo){
    return "1";
}

由于 PathVariables 是路径的一部分,因此它们始终是必需的。如果您不将它们包含在请求中,您最终会调用另一个端点,或者如果请求无法映射到任何端点,则会收到 404。

RequestParams 是在请求​​ URL 末尾收到的参数,在“?”之后字符。

@GetMapping("/api/foo")
public Void getFooNumber(@RequestParam(value="version", required=false) Integer version, @RequestParam(value="idFoo", required=true) Integer idFoo){
    return "1";
}

使用 RequestParams,您可以为它们中的每一个定义是否需要。

您也可以混合使用它们,并在相同的方法中使用 PathVariables 和 RequestParams。

在第一个示例中,请求 URL 将是“.../api/1/foo/25”,而在第二个示例中,它将是“.../api” /foo?version=1&idFoo=25"

至于有数组还是列表,如果将参数定义为List,则可以发送多个同名参数:

@GetMapping("/ads/in/rubrics")
public Void findAllAdInRubricByIds(@RequestParam(value="ids", required=true) List<Integer> ids){
    return adService.findAllAdInRubricByIds(ids);
}

在这种情况下,您可以使用“.../ads/in/rubrics?ids=1&ids=2&ids=3&ids=4

【讨论】:

    【解决方案2】:
    http://localhost:9999/mvc/ad/ads/in/rubrics/?ids1=1&ids2=2
    

    对于第一个参数,使用 ?然后对于每个附加参数 a &

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 2013-03-12
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多