【问题标题】:How to read properties with special characters from application.yml in springboot如何在spring boot中从application.yml中读取带有特殊字符的属性
【发布时间】:2019-11-30 11:41:48
【问题描述】:

application.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.发布

【问题讨论】:

    标签: java spring-boot


    【解决方案1】:

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

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

    输出

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

    Binding

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

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

    【讨论】:

    • 经过大量搜索,我终于找到了这个答案。伟大的!作为旁注:如果您有这样的属性键:tenants.tenant.info@example.com 不要只转义 @-sign 或整个键。它以这种方式对我有用:tenants.tenant.[info@example.com]
    【解决方案2】:

    请记住,左边是一个 yml 键,而不是任意字符串。我的建议或您的用例是在右侧有一张地图,例如:

    foo:
      - name: "Samsung+Vodafone"
        code: "SAMSVV"
      - name: "BlackBerry"
        code: "BBMS"
      - name: "Samsung"
        codes: 
         - "SAMS"
         - "SMG"
    

    你将不得不稍微改变你的类结构,但实际上你可以从中重构你的初始方法。

    【讨论】:

    • 根据要求,我们有单个产品的代码数量。所以它的结构对我没用。
    • @RohanSutar 这也是可能的 - 只需制作“代码”和数组“
    • @RohanSutar 即使您可以绕过“+”号(我对此表示怀疑)-左侧永远不能是任意字符串。 (查看规格:yaml.org/spec/1.2/spec.html
    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 2019-01-31
    • 2020-01-22
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2015-03-18
    相关资源
    最近更新 更多