SpEL 函数更改字符串

SpEL function changes String

我正在尝试从属性中获取字符串,运行 对其进行操作,然后将其存储为带有 @Value 注释的变量。不幸的是,当我使用我需要使用的 #{'${variable}'} 语法来使用 SpEL 时,字符串会发生变化。如果我有两个双引号 (""),它们将更改为单个双引号 ("),这会阻止我反序列化字符串。如何防止 Spring 删除第二个引号?

myProperties.properties
myValue={"myWorkingKey": "Hi!", "myNonWorkingKey": ""}


MyClass.java
public class MyClass {

  @Value("#{'${myValue}'}")
  public void printWithSpEL(String withSpEL){
    System.out.println(withSpEL);
  }

  @Value("${myValue}")
  public void printWithOut(String without){
    System.out.println(without);
  }
}

启动后结果:

{"myWorkingKey": "Hi!", "myNonWorkingKey": "}
{"myWorkingKey": "Hi!", "myNonWorkingKey": ""}

这么简单的值为什么要用SpEL? 属性 占位符就足够了。

或者这只是一个基于更复杂事物的示例。

对于 SpEL,您需要三引号:

myValue={"myWorkingKey": "Hi!", "myNonWorkingKey": """}

为什么要加载到 String?加载到 Map<String, String>.

@Value("#{${myValue}}")
public void printWithSpEL(Map<String, String> withSpEL){
    System.out.println(withSpEL);
}