我尝试加载外部文件的属性值,并将属性存储为键值格式(Map)。如果我使用java的Map,它就可以正常工作,就像代码一样:
import java.util.{Map, HashMap}
@Component
@ConfigurationProperties(prefix="config")
class ConfigProperties {
val corporationSecrets : Map[String, String] = new HashMap[String, String]
}
但是当我只是将地图更改为Scala的地图时,我无法从地图中获取任何值,即地图为空。
import java.util.HashMap
import scala.collection.JavaConverters._
@Component
@ConfigurationProperties(prefix="config")
class ConfigProperties {
val corporationSecrets : Map[String, String] = new HashMap[String, String].asScala
}
我尝试了可变地图和不可变地图,但没有案例有效。
这是否意味着我不能在案件中使用Scala的地图?
答案 0 :(得分:1)
是的,Spring Boot并不知道如何处理Scala集合。但是您可以在内部使用Java集合并添加返回Scala版本的方法。当然,他们需要有不同的名字。 E.g。
import java.util.{HashMap => JHashMap, Map => JMap}
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.stereotype.Component
import scala.beans.BeanProperty
import scala.collection.JavaConversions._
@Component
@ConfigurationProperties(prefix = "security-util")
class SecurityUtilProperties {
@BeanProperty
val corporationSecrets: JMap[String, String] = new JHashMap[String, String]
def corporationSecretsScala = corporationSecrets.asScala
}