Java Spring模型属性正确解析

Java Spring模型属性正确解析,java,spring,spring-mvc,modelattribute,Java,Spring,Spring Mvc,Modelattribute,我有一个Spring控制器,其端点如下: @RequestMapping("/provider") public ResponseEntity<Something> load(@ModelAttribute PageRequest pageRequest) { ... //do something } 当我收到如下请求时: ../provider?field=commanders&value=John%2CBill%2CAlex然后pageRequest数据被映射: fie

我有一个Spring控制器,其端点如下:

@RequestMapping("/provider")
public ResponseEntity<Something> load(@ModelAttribute PageRequest pageRequest)
{
    ... //do something
}
当我收到如下请求时:
../provider?field=commanders&value=John%2CBill%2CAlex
然后
pageRequest
数据被映射:

field[0] = commanders;

value[0] = John
value[1] = Bill
value[2] = Alex 
field[0] = country;
field[1] = commanders;

value[0] = Australia
value[1] = "John,Bill,Alex"
但当我收到这样的请求时:
../provider?field=country&value=Australia&field=commanders&value=John%2CBill%2CAlex
然后
pageRequest
映射数据:

field[0] = commanders;

value[0] = John
value[1] = Bill
value[2] = Alex 
field[0] = country;
field[1] = commanders;

value[0] = Australia
value[1] = "John,Bill,Alex"
我的问题是,为什么这些请求的映射不同,第一个请求的映射可以与第二个请求的映射相同吗。(逗号
%2C
分隔数据映射到单个值)


used:Spring 3.x

我做了一些调查,发现对于第一个请求
value=John%2CBill%2CAlex
Spring使用
org.springframework.format.supportDefaultFormattingConversionService
类,它在引擎盖下有
org.springframework.core.convert.support.StringToArrayConverter
convert()
方法使用逗号作为分隔符将字符串拆分为数组

解决此问题有两种方法:

  • 使用;而不是,作为值的分隔符(
    value=John;Bill;Alex
  • 使用不同的转换服务bean,其中包含从字符串到字符串[]的您自己的转换器。有关更多详细信息,请参见此