如何在Spring String中将“,”(逗号)转换为数组或List转换

时间:2014-05-16 02:40:01

标签: java spring spring-mvc

我们有一个Spring绑定,它使用Spring提供的默认转换器将字符串转换为List

例如,如果我们从表单中推出a, b, c,则控制器会获得带有元素的List

  1. 一个
  2. B'/ LI>
  3. C
  4. 我们不需要在代码中做任何特别的事情。

    我在处理数据中的逗号时遇到问题。如果我在这里提交a, x,z, b , c x,z实际上是一个字符串,但是Spring转换器不知道它并假设它是一个分隔符并组成List这样:< / p>

    1. 一个
    2. X
    3. ý
    4. B'/ LI>
    5. C
    6. 现在我来问我的问题:

      1. 提交表单时,我可以在数据中转义,(逗号)吗?
      2. 如果我必须注册自定义转换器,是否会影响特定数据字符转义的默认行为?
      3. 我可以控制转换器的顺序吗?
      4. 如何告诉我的转换器单独获取此类数据?
      5. 如果我必须创建自定义转换器,我是否可以使用自定义注释来说明我的转换器应仅适用于获得注释的字段?

2 个答案:

答案 0 :(得分:0)

您是否尝试过引用这样的条目?

“a”,“x,z”,“b”,“c”

答案 1 :(得分:0)

我认为,实际上在Spring属性中没有办法转义逗号,而这些属性在Spring之前已转换为列表/数组(例如,借助于ConfigurationProperties类或类似的属性)。

也许使用SpEL或其他方法有一些晦涩的方法,但我发现以“索引”表示法指定列表属性更加容易(不确定如何正确调用)。

您的示例这样翻译

# results in ["a", "x", "z", "b", "c"]
some.property.list=a, x,z, b, c
# results in ["a", "x,z", "b", "c"]
some.property.list[0]=a
some.property.list[1]=x,z
some.property.list[2]=b
some.property.list[3]=c

但是,明显的缺点是您需要手动维护索引。但是通常,在这样一个可配置的列表中,您的条目数量有限(至少从我迄今为止的经验来看)。

另一种方法当然是切换到YAML配置而不是属性:

some:
  property:
    list:
    - "a"
    - "x,z"
    - "b"
    - "c"