【问题标题】:Spring SpEL can't use space character when parsing List with @Value annotationSpring SpEL在解析带有@Value注释的List时不能使用空格字符
【发布时间】:2020-10-02 15:09:56
【问题描述】:

我正在尝试使用 SPeL 解析字符串列表的列表。 参数是使用命令行参数而不是 .properties 文件指定的。当我不在字符串文字中使用空格字符时,一切正常,但是当我这样做时,我得到一个解析异常。

编辑:我正在使用 Spring Boot 2.2.9.RELEASE

带有@Value注解的列表:

@Value("#{${param}}")
private List<List<String>> param;

指定为命令行参数的属性,不起作用:

--param={{'With Space','b'},{'x','y'}}

导致异常:

Caused by: org.springframework.expression.ParseException: Expression [#{{{'With}] @4: Found non terminating string literal starting at position 4

这确实有效:

--param={{'WithoutSpace','b'},{'x','y'}}

有没有办法用包含空格字符的字符串元素来解析这样的列表?

【问题讨论】:

  • 什么版本的 Spring?我刚刚复制/粘贴了您的代码/参数,它适用于 Spring 5.2.9。 [[With Space, b], [x, y]].
  • Spring Boot 2.2.9.RELEASE
  • 我刚刚将我的应用更改为使用 2.2.9 而不是 2.3.4; 2.2.9 使用 spring-expression 5.2.8 对我来说仍然可以正常工作;也许你可以发布一个完整的(小)应用程序来展示这种行为,这样我就可以看到哪里出了问题。
  • 我知道出了什么问题,似乎只有当您使用命令行参数--param={{'With Space','b'},{'x','y'}} 指定它时才会发生这种情况,但是当您在 .properties 文件中指定它时它确实可以正常工作。刚刚更新了这个问题。

标签: spring spring-el


【解决方案1】:

命令行参数应该是:

--param="{{'With Space','b'},{'x','y'}}"

被正确解析!请注意 = 之后和末尾的 --param 值周围的引号字符 "

【讨论】:

    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多