首页 > 解决方案 > 如何在springboot中从application.yml中读取带有特殊字符的属性

问题描述

应用程序.yml

mobile-type:
  mobile-codes:
    BlackBerry: BBSS
    Samsung: SAMS
    Samsung+Vodafone: SAMSVV
  1. 从应用程序 yml 文件中读取 (Samsung+Vodafone)key 时,我们得到了。串联字符串格式为 'SamsungVodafone' 。

  2. 此外,我们尝试过 "Samsung'/+'Vodafone": SAMSVV 但结果相同,我们尝试了其他符号,例如 '-' 所以它工作正常。

  3. 用于从应用程序 yml 文件中读取键和值。我们写了下面的代码。

import java.util.Map;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 @ConfigurationProperties(prefix = "mobile-type")
    @Component
    public class mobileTypeConfig {


        Map<String, String> mobileCodes;

        public Map<String, String> getMobileCodes() {
            return mobileCodes;
        }

        public void setMobileCodes(Map<String, String> mobileCodes) {
            this.mobileCodes= mobileCodes;
        }
}

注意:Spring Boot 版本 2.0.6.RELEASE

标签: javaspring-boot

解决方案


使用方括号不要转义任何字符并将其编码为双引号

mobile-type:
  mobile-codes:
    BlackBerry: BBSS
    Samsung: SAMS
    "[Samsung+Vodafone]": SAMSVV

输出

{BlackBerry=BBSS, Samsung=SAMS, Samsung+Vodafone=SAMSVV}

捆绑

绑定到 Map 属性时,如果键包含小写字母数字字符或 - 以外的任何内容,则需要使用括号表示法以保留原始值。如果键没有被 [] 包围,则任何不是字母数字或 - 的字符都将被删除。例如,考虑将以下属性绑定到 Map:

acme:
  map:
   "[/key1]": value1
   "[/key2]": value2

推荐阅读