【发布时间】:2020-12-16 23:52:29
【问题描述】:
我正在通过一个简单的网络表单发送names:
<form action="test" method="GET">
<select name="names" multiple="true">
<option>Doe, Jane</option>
<option>Doe, John</option>
</select>
<input type="submit"/>
</form>
names 绑定到控制器中的List:
@GetMapping("/test")
public String test(@RequestParam List<String> names, Model m) {
System.out.println(names.size());
System.out.println(names);
return "test";
}
但是因为我的名称值包含逗号 (,),所以 Spring 正在将应该是单个名称值的内容解析为两个字符串。
GET 对 /test?names=Doe, John 的请求(将逗号的 URL 编码从 , 删除到 %2C 以提高可读性)会生成一个包含两个字符串值的列表,Doe 和 John,而不是单个值Doe, John 随意。
但是,当发送多个值时,事情会按预期工作,例如:/test?names=Doe, Jane&names=Doe, John。在这种情况下,我有一个包含两个项目的列表:Doe, Jane 和 Doe, John。
一种解决方法是简单地始终在表单中发送一个空的names 值,包括:
<input type="hidden" name="names"/>
然后从列表中删除空值。但我不想这样做。
如何将 Spring MVC 配置为不使用逗号解析字符串值,而是期望列表属性值像 ?name=Jon&name=Sue&name=Bob 一样简单地重复?
我正在使用 Spring Boot 2.3.2。谢谢!
【问题讨论】:
标签: spring spring-boot spring-mvc