Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用SpringREST和复杂查询参数?_Java_Spring_Rest_Spring Restcontroller - Fatal编程技术网

Java 如何使用SpringREST和复杂查询参数?

Java 如何使用SpringREST和复杂查询参数?,java,spring,rest,spring-restcontroller,Java,Spring,Rest,Spring Restcontroller,我有一个资源,我想过滤一些搜索词,其中有一些属性,我想在格式发送 ?attributeNames[0]=Foo&attributeValues[0]=Bar&attributeValues[0]=Baz (或语义等效-每个名称可以映射到一个或多个值) 在Spring REST端点中表示这一点的最佳方式是什么?我试过使用方法参数,比如 public void endpoint(@RequestParam(...)String[] names, @RequestParam(...)

我有一个资源,我想过滤一些搜索词,其中有一些属性,我想在格式发送

?attributeNames[0]=Foo&attributeValues[0]=Bar&attributeValues[0]=Baz
(或语义等效-每个名称可以映射到一个或多个值)

在Spring REST端点中表示这一点的最佳方式是什么?我试过使用方法参数,比如

public void endpoint(@RequestParam(...)String[] names, @RequestParam(...)String[][] values) {
}

但这似乎并不像预期的那样有效(我看不到任何正确指定参数名称的方法)。如果我使用其他机制(例如,将参数序列化为JSON对象),是否有可能做到这一点,或者效果会更好呢?

从技术上讲,您可以将其作为一个查询参数来实现,因为之后的一切都是这样的?可以解释为一个参数

然后,您可以在端点内以编程方式处理它


但这不是一个推荐的方法,因为你最终会在URL中暴露很多东西。更好的方法是将其作为一个或表单参数处理在请求体中

请求参数有其自身的限制,特别是在涉及数组时。正如给定的答案所述,在这种情况下,最好将它们作为请求体传递。可能是@DanielFigueroa的重复,这很接近,但我需要从另一个参数中引用一个参数的索引。Spring 3+支持@RequestParam,并带有多值映射,允许您像上面所做的那样重复查询参数键。也看到