我以这种方式从表单发送一些参数:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
我知道我可以通过添加像
这样的参数来获取控制器方法中的所有参数public String controllerMethod(@RequestParam Map<String, String> params){
....
}
我想将参数myParam [](而不是其他参数)绑定到列表或数组(保持索引顺序的任何内容),所以我尝试使用如下语法:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
和
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
但它们都没有绑定myParams。即使我向地图添加了一个值,它也无法绑定参数:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
是否有任何语法将一些参数绑定到列表或数组而不必创建一个具有list属性的@ModelAttribute对象?
由于
答案 0 :(得分:104)
或者你可以这样做:
public String controllerMethod(@RequestParam(value="myParam[]") String[] myParams){
....
}
例如对于这样的表格有用:
<input type="checkbox" name="myParam[]" value="myVal1" />
<input type="checkbox" name="myParam[]" value="myVal2" />
这是最简单的解决方案:)
答案 1 :(得分:66)
@RequestParam
中的数组用于绑定多个同名参数:
myparam=myValue1&myparam=myValue2&myparam=myValue3
如果你需要绑定@ModelAttribute
- 样式的索引参数,我想你无论如何都需要@ModelAttribute
。
答案 2 :(得分:16)
只是补充Donal Fellows所说的,你可以使用List with @RequestParam
public String controllerMethod(@RequestParam(value="myParam") List<ObjectToParse> myParam){
....
}
希望它有所帮助!
答案 3 :(得分:10)
答案 4 :(得分:6)
如果method = RequestMethod.GET
@RequestParam List<String> groupVal
可以使用API_URL?groupVal=kkk,ccc,mmm
,则订阅罗勒在问题评论中所说的内容。
然后使用params列表调用服务就像这样简单:
#define flag true
void Foo()
{
for (size_t i = 0; i < veryBigNumber; i++)
{
if (flag)
doSomething1();
doSomething2();
}
}
答案 5 :(得分:1)
虽然您可以接受Collection作为请求参数,但对我而言并不明显,但是在消费者方面,您仍然必须以逗号分隔的值形式传递集合项。
例如,如果服务器端api如下所示:
@PostMapping("/post-topics")
public void handleSubscriptions(@RequestParam("topics") Collection<String> topicStrings) {
topicStrings.forEach(topic -> System.out.println(topic));
}
像下面的一样直接将集合作为RequestParam传递给RestTemplate会导致数据损坏
public void subscribeToTopics() {
List<String> topics = Arrays.asList("first-topic", "second-topic", "third-topic");
RestTemplate restTemplate = new RestTemplate();
restTemplate.postForEntity(
"http://localhost:8088/post-topics?topics={topics}",
null,
ResponseEntity.class,
topics);
}
相反,您可以使用
public void subscribeToTopics() {
List<String> topicStrings = Arrays.asList("first-topic", "second-topic", "third-topic");
String topics = String.join(",",topicStrings);
RestTemplate restTemplate = new RestTemplate();
restTemplate.postForEntity(
"http://localhost:8088/post-topics?topics={topics}",
null,
ResponseEntity.class,
topics);
}
The complete example can be found here,希望它可以使人免于头痛:)
答案 6 :(得分:-5)
使用下面的复选框切换更改隐藏的字段值...
<强> HTML:强>
<input type='hidden' value='Unchecked' id="deleteAll" name='anyName'>
<input type="checkbox" onclick="toggle(this)"/> Delete All
<强>脚本:强>
function toggle(obj) {`var $input = $(obj);
if ($input.prop('checked')) {
$('#deleteAll').attr( 'value','Checked');
} else {
$('#deleteAll').attr( 'value','Unchecked');
}
}