Spring MVC — ввод карты из файла yaml

#java #spring #yaml

#java #весна #yaml

Вопрос:

У меня есть файл конфигурации 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. Однако список стран в контроллере пуст.

Конфигурация приложения обеспечивается классом, содержащим следующие аннотации:

 @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. Вы не показали сам свой контроллер и не сказали, используете ли вы Spring Boot для запуска своего приложения.

2. Я не использую Spring Boot, просто обычный Spring MVC. Прилагается код контроллера

Ответ №1:

@ConfigurationProperties это функция загрузки Spring и не будет привязана к application.yml , если вы ее не используете. Обычно лучшим решением является преобразование для загрузки.

Комментарии:

1. ОК. Есть ли какой-либо способ загрузить карту из файла конфигурации с помощью аннотаций?

2. @zleek Не просто путем добавления дополнительных аннотаций в приложение без использования Boot. Конкретная функция, которую вы хотите (разрешение свойств application.yml ), является одним из самых простых для загрузки, и если вы включите все необходимые элементы, вы все равно выполните полное преобразование. Обратите внимание, что я использую Spring с версии 3.0 и последние семь лет использую исключительно Boot.