Java 接收集合/Iterable作为spring引导控制器中的参数

Java 接收集合/Iterable作为spring引导控制器中的参数,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我是Spring新手,我想编写一个控制器,它将集合/可伸缩作为参数。像这样: @RequestMapping(value = "friends", method = RequestMethod.POST) public @ResponseBody Callable<Iterable<User>> getFriendsOfUser(@RequestParam(required = true, name = "mobiles") Iterable<String>

我是Spring新手,我想编写一个控制器,它将
集合
/
可伸缩
作为参数。像这样:

@RequestMapping(value = "friends", method = RequestMethod.POST)
public @ResponseBody Callable<Iterable<User>> 
getFriendsOfUser(@RequestParam(required = true, name = "mobiles") Iterable<String> mobs) {
    // return callable
}
@RequestMapping(value=“friends”,method=RequestMethod.POST)
public@ResponseBody可调用
getFriendsOfUser(@RequestParam(required=true,name=“mobiles”)Iterable mobs){
//返回可调用
}

没有编译错误,但我无法使其正常工作。你能说这是怎么回事吗?对该api的请求应该如何构造?

您已经映射了一个
POST
方法,因此您可能需要
@RequestBody
而不是
@RequestParam

顾名思义,
@RequestParam
是请求参数:
[host]/endpoint?param=foo&secondParam=bar

鉴于


@RequestBody
用于JSON/XML或作为请求正文发送的任何其他类型的内容。

您已经映射了
POST
方法,因此可能需要
@RequestBody
而不是
@RequestParam

public String getFriendsOfUser(@RequestParam(required = true, value = "mobiles")  String[] mobiless){
....
}
顾名思义,
@RequestParam
是请求参数:
[host]/endpoint?param=foo&secondParam=bar

鉴于

@RequestBody
用于JSON/XML或作为请求正文发送的任何其他类型的内容

public String getFriendsOfUser(@RequestParam(required = true, value = "mobiles")  String[] mobiless){
....
}
你的手机应该是

mobiles=myValue1&mobiles=myValue2&mobiles=myValue3

如果您有任何疑问,请发布前端代码和Ajax调用

你的手机应该是

mobiles=myValue1&mobiles=myValue2&mobiles=myValue3



如果您有任何疑问,请发布前端代码和Ajax调用。

您可以发布您的RestURL吗?这样我们就可以发现问题。我现在正在使用localhost,就像“我在URL中没有看到任何请求参数,那么为什么要使用requestParam?如果是表单元素,请使用Modelattribute,如果是json,请使用RequestParamOk,你能帮我拿一个集合作为论点吗?我是否应该创建一个类似于
public class Friend{private Collection users;//getters setters}
的模型,然后使用@modeldattribute?请发布您的RestURL?这样我们就可以发现问题了。我现在正在使用localhost,就像“”我在您的URL中没有看到任何请求参数,那么为什么要使用requestParam?如果是表单元素,请使用Modelattribute,如果是json,请使用RequestParamOk,那么您能帮助我将集合作为参数吗?我应该创建一个像
公共类Friend{private Collection users;//getters setters}
这样的模型,然后使用@modeldattribute吗?好的,你能举个例子在requestbody中发送一个list/Collection/iterable吗?比如说,在这种情况下,如果我用RequestBody替换RequestParam,那么我必须发送给服务器的请求正文应该是什么?这根本不是真的。如果您是
POST
ing,内容类型为
application/x-www-form-urlencoded
,那么
@RequestParam
s是合适的,因为POST正文看起来像
之后的
GET
url?
确定,那么您能给出一个在requestbody中发送列表/集合/iterable的示例吗?比如说,在这种情况下,如果我用RequestBody替换RequestParam,那么我必须发送给服务器的请求正文应该是什么?这根本不是真的。如果您是
POST
ing,内容类型为
application/x-www-form-urlencoded
,那么
@RequestParam
s是合适的,因为POST主体看起来像
GET
url,后面是
这是一个GET请求,但我希望它是一个POST。你能帮我吗?你也可以用这个来进行post调用。请发布你的前端代码,这样我们就可以给出准确的解决方案,否则我们就无能为力了。我没有做任何前端,这将被用作android应用程序的api,我只是在一个rest客户端上试用api。你的解决方案有效。更正我的错误,Iterable不能作为POST请求的参数发送。只能通过api发送数组。它可以是。当您使用以下主体执行
POST
调用时:
[“foo”,“bar”]
然后Spring会将其自动装箱到
集合
Iterable
@Debanjan是的,我们可以发送遵循罗夏方法的消息,或者如果您想要更精确的答案,请告诉我我将与您分享。如果答案有效,请接受。这是GET请求,但我想把它作为一个帖子。你能帮我吗?你也可以用这个来进行post调用。请发布你的前端代码,这样我们就可以给出准确的解决方案,否则我们就无能为力了。我没有做任何前端,这将被用作android应用程序的api,我只是在一个rest客户端上试用api。你的解决方案有效。更正我的错误,Iterable不能作为POST请求的参数发送。只能通过api发送数组。它可以是。当您使用以下主体执行
POST
调用时:
[“foo”,“bar”]
然后Spring会将其自动装箱到
集合
可编辑
@Debanjan是的,我们可以按照罗夏方法发送,或者如果您想要更精确的答案,请告诉我,我会与您分享。如果答案有效,请接受。