Внедрение свойств из application.yml на карту
У меня есть application.yml с различными свойствами, как показано ниже.
lists:
exampleList: [1,2,3]
exampleString: abcde
another:
example1: exam1
example2: exam2
И я связываю эти свойства с компонентом Spring, используя @ConfigurationProperties
@Data
@Component
@ConfigurationProperties
public class ExampleConfig {
private Map<String,Object> lists;
}
Я добавлю этот компонент в контроллер начальной загрузки и свяжу этот конфиг с конечной точкой get config /controller/config
Когда вызывается эта конечная точка, ожидание возврата
{
"lists": {
"exampleList": ["1", "2", "3"],
"exampleString": "abcde"
"another": {
"example1": "exam1",
"example2": "exam2"
}
}
}
Вместо этого он возвращает ответ, как показано ниже
{
"lists": {
"exampleList": {
"0" : "1",
"1" : "2",
"2" : "3"
}
"exampleString": "abcde"
"another": {
"example1": "exam1",
"example2": "exam2"
}
}
}
Список в yml сопоставляется с объектом на карте. Как мы можем добиться правильной привязки к соответствующим типам данных?
Ценю твою помощь!
1 ответ
Существует более сложное решение. Вместо того, чтобы вводить все ваши конфиги в Map
у вас может быть простой Java DTO, который представляет структуру ваших конфигураций.
Вставьте ваши конфиги в Java DTO с помощью @ConfigurationProperties
и верните JavaDTO из конечной точки вашего контроллера.
См. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
Конечная точка исполнительного механизма пружинного башмака также имеет специальную конечную точку, называемую configprops
который дает все свойства конфигурации. Однако, если вы хотите использовать это, вам, возможно, придется сделать много настроек. Для получения дополнительной информации https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html