当前位置: 首页 > 知识库问答 >
问题:

Spring MVC-从yaml文件注入映射

诸葛卜霸
2023-03-14

我有一个配置YAML(application.yml)文件,其中包含位置数据:

locations:
  countries:
    PL: Poland
    DE: Germany
    UK: UK
    RU: Russia

我想加载它,以便它在html选择字段中可用。

我创建了以下类:

package eu.test.springdemo.model;

import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Map;

@ConfigurationProperties(prefix = "locations")
public class CountryOptions {

    private Map<String, String> countries;

    public Map<String, String> getCountries() {
        return countries;
    }

    public void setCountries(Map<String, String> countries) {
        this.countries = countries;
    }
}

然后我通过@Autowire将CountryOptions注入Controller。但是控制器中的国家列表为空。

应用程序的配置由包含以下注释的类提供:

@Configuration
@EnableWebMvc
@EnableConfigurationProperties(CountryOptions.class)
@ComponentScan(basePackages="eu.test.springdemo")
public class DemoAppConfig implements WebMvcConfigurer {

控制器代码

package eu.test.springdemo.mvc;

import eu.test.springdemo.model.CountryOptions;
import eu.test.springdemo.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/")
public class HelloController {

    @Autowired
    CountryOptions countryOptions;

    @GetMapping("/")
    public String showPage() {
        return "main-menu";
    }

    @GetMapping("/showForm")
    public String showForm(Model model) {
        model.addAttribute("student", new Student());
        model.addAttribute("countries", countryOptions.getCountries());

        return "helloworld-form";
    }
}

那么-有什么想法为什么国家列表不是从yaml文件创建的吗?

共有1个答案

吴同
2023-03-14

@ConfigurationProperties是Spring Boot功能,不会绑定到应用程序。yml,如果您不使用它。最好的解决方案通常是转换为引导。

 类似资料:
  • 属性文件如下所示: 根据这一点,我尝试了以下方法: 在另一个组件中,我autowired应用特性:

  • 我有这样的价值观application.yaml 在服务中,我尝试注入它: 但我有个例外: 原因:java.lang.IllegalArgumentException:无法解析占位符“导入收费字段”的值“${导入收费字段}” 我尝试以下方法: 和 和 而且它不工作

  • 我想在我的yaml文件中定义一个映射以在yaml文件中使用。 注意:我们对 yaml 有一个预处理步骤,它基本上允许我们插入可替换的令牌。我想使用替换令牌的值作为我的密钥...这就是为什么我不知道在我写yaml时我想要什么价值,只是FYI 所以简而言之,我想做的是这样的事情 或 或 我期望的结果是 然而使用https://yaml-online-parser.appspot.com/ 我可以看到这

  • 问题内容: 我有一个带有以下内容的Spring Boot应用程序-基本上是从这里获取的: 我可以注入特定的值,例如 但是,我想注入整个地图,例如: 那(或类似的东西)可能吗?显然,我可以直接加载yaml,但是想知道Spring是否已经支持了某些东西。 问题答案: 你可以使用插入地图 使用问题中的yaml运行它会产生: 有多种选项可用于设置前缀,控制如何处理缺少的属性等。有关更多信息,请参见java

  • 我有一个带有以下的spring boot应用程序--基本上取自这里: 我可以注入特定的值,例如。 然而,我想注入整个地图,即如下所示: 那(或类似的事情)可能吗?显然,我可以直接加载yaml,但我想知道spring是否已经支持了一些东西。

  • 我有以下问题。我根据一个给定的概要文件在yaml文件中读取的值创建一个数据源。 我当前的问题是,当我用“dev”配置文件启动应用程序时,serviceId的值是'my-prod-service'。 我在这里做错了什么?