java - Spring ModelAttribute正确解析

标签 java spring spring-mvc modelattribute

我有 Spring Controller ,端点如下:

@RequestMapping("/provider")
public ResponseEntity<Something> load(@ModelAttribute PageRequest pageRequest)
{
    ... //do something
}

其中 PageRequest 是简单的 POJO:

class PageRequest 
{
    String[] field;
    String[] value;
    ... // constructor getters settest
} 

当我收到这样的请求时: .../provider?field=commanders&value=John%2CBill%2CAlex 然后 pageRequest 数据被映射:

field[0] = commanders;

value[0] = John
value[1] = Bill
value[2] = Alex 

但是当我收到这样的请求时: .../provider?field=country&value=Australia&field=commanders&value=John%2CBill%2CAlex 然后 pageRequest 数据被映射:

field[0] = country;
field[1] = commanders;

value[0] = Australia
value[1] = "John,Bill,Alex"

我的问题是为什么这些请求的映射不同,第一个请求和第二个请求是否可以相同。 (逗号 %2C 将数据映射到单个值)。

使用:Spring 3.x

最佳答案

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

您有两种方法可以解决此问题:

  1. 使用;而不是 , 作为您值的分隔符 (value=John;Bill;Alex)
  2. 使用包含您自己的从 String 到 String[] 的转换器的不同转换服务 bean。有关详细信息,请查看此 answer

关于java - Spring ModelAttribute正确解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703530/

相关文章:

java - 如何在 Java 中使用 JButton 重新绘制组件?

java - 获取在另一个模块中创建的 bean,当前模块不具有依赖关系

java - Spring java 应用程序中的包命名

java - org.hibernate.MappingException : Could not determine type

java - 隐藏的 JDialog 在 Windows 10 任务栏预览中仍然可见

java - 为什么 getPersonal() 在下面的情况下返回 null?

validation - Spring 门户 MVC。 @ResourceMapping 之前的验证。 @ResourceMapping -> @RenderMapping

java - Spring:如何从属性文件中设置@DateTimeFormat 模式?

java - Matlab 无法读取 JAR 资源

java - 如何为具有类型参数的类调用 .class?例如。列表<String>.class