首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpringBoot地图yaml到地图地图

SpringBoot地图yaml到地图地图
EN

Stack Overflow用户
提问于 2019-02-14 07:54:08
回答 2查看 1.7K关注 0票数 2

是否可以将下面的yaml文件注入Spring应用程序作为Map<String, Map<String, String>,其中tradeType将是外部映射的关键,而P和B将是内部映射的关键值。

代码语言:javascript
复制
tradeType:
    P: B
    S: S
securityCode: 
    ICI: ICICI Bank
    BOB: Bank of Baroda
    BOA: Bank of America
    BOS: Bank of Singapore 

就像建议的那样,这就是我班上的样子。

代码语言:javascript
复制
@Configuration
@PropertySource("file:data/referenceDataMapping.yaml")
@ConfigurationProperties(prefix = "map")
public class ReferenceDataMapping {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    private Map<String, Map<String, String>> entries;

    @Override
    public String toString() {
        if (entries != null) {
            logger.info(entries.toString());
            return entries.toString();
        } else {
            return null;
        }
    }

    public Map<String, Map<String, String>> getEntries() {
        return entries;
    }

    public void setEntries(Map<String, Map<String, String>> entries) {
        this.entries = entries;
    }

}

来自build.gradle

代码语言:javascript
复制
dependencies {
    compile 'org.springframework.boot:spring-boot-starter-activemq:2.1.2.RELEASE'
    compile 'org.springframework.boot:spring-boot-starter-security:2.1.2.RELEASE'
    compile 'org.springframework.boot:spring-boot-starter-web:2.1.2.RELEASE'
    compile 'org.apache.camel:camel-spring-boot-starter:2.23.1'
    compile 'org.apache.camel:camel-quartz2:2.23.1'
    compile 'org.apache.camel:camel-jms:2.23.1'
    compile 'org.apache.camel:camel-jacksonxml:2.23.1'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.9.8'
    compile 'net.sf.saxon:Saxon-HE:9.9.1-1'
    testCompile 'org.springframework.boot:spring-boot-starter-test:2.1.2.RELEASE'
    testCompile 'org.springframework.security:spring-security-test:5.1.3.RELEASE'
}

referenceDataMapping.yaml

代码语言:javascript
复制
    map: 
   entries:
      tradeType:
          P: B
          S: S
      securityCode: 
          ICI: ICICI Bank
          BOB: Bank of Baroda
          BOA: Bank of America
          BOS: Bank of Singapore
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-14 08:05:23

。这是可能的。

代码语言:javascript
复制
@Configuration
@ConfigurationProperties(prefix="map")
public class Test {

    private Map<String,Map<String,String>> entires;

    public Map<String, Map<String, String>> getEntires() {
        return entires;
    }

    public void setEntires(Map<String, Map<String, String>> entires) {
        this.entires = entires;
    }

}

application.yml

代码语言:javascript
复制
map:
  entires:
    tradeType:
      P: B
      S: S
    securityCode: 
      ICI: ICICI Bank
      BOB: Bank of Baroda
      BOA: Bank of America
      BOS: Bank of Singapore 

产出:

代码语言:javascript
复制
{tradeType={P=B, S=S}, securityCode={ICI=ICICI Bank, BOB=Bank of Baroda, BOA=Bank of America, BOS=Bank of Singapore}}

更新:

如本github-发行所述。@PropertySource不支持yaml文件。在这种情况下,请遵循本指南PropertySource-with文件

票数 2
EN

Stack Overflow用户

发布于 2019-02-14 08:40:26

如果YAML位于与application.yml不同的文件中,

代码语言:javascript
复制
@Component
public class YourClass {


    private Map<String, String> tradeType;
    private Map<String, String> securityCode;

    public Map<String, String> getTradeType() {
        return tradeType;
    }

    public Map<String, String> getSecurityCode() {
        return securityCode;
    }


    @PostConstruct
    public void yamlFactory() {
        YamlMapFactoryBean factory = new YamlMapFactoryBean();
        factory.setResources(new ClassPathResource("your.yml"));
        tradeType = (Map<String, String>) factory.getObject().get("tradeType");
        securityCode = (Map<String, String>) factory.getObject().get("securityCode");
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54685528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档