#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.