【问题标题】:Spring ModelAttribute correct parsingSpring ModelAttribute 正确解析
【发布时间】:2018-05-22 01:26:51
【问题描述】:

我有带有端点的 Spring 控制器:

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

PageRequest 是简单的 POJO:

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

当我 GET 请求时: .../provider?field=commanders&amp;value=John%2CBill%2CAlex 然后pageRequestdata 被映射:

field[0] = commanders;

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

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

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

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

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

used: Spring 3.x

【问题讨论】:

    标签: java spring spring-mvc modelattribute


    【解决方案1】:

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

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

    1. 使用;而不是 , 作为您价值的分隔符 (value=John;Bill;Alex)
    2. 使用不同的转换服务 bean,其中包含您自己的从 String 到 String[] 的转换器。更多详情请看answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-04
      • 2023-03-29
      • 2018-04-06
      • 2020-04-02
      • 1970-01-01
      • 2021-12-15
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多