Как сопоставить свойство в приложении.yml с JsonNode? (Весна)

#spring #spring-boot #configuration #jackson #application.properties

#весна #весна-загрузка #конфигурация #джексон #application.properties

Вопрос:

В @ConfigurationProperties компоненте я мог бы сопоставить customers свойство application.yml приведенного ниже файла с List<Customer> , но вместо этого я хотел бы сопоставить его с Джексоном JsonNode . Возможно ли это? Если да, то как?

 shop:
  name: "Sam's Bikes"
  customers:
    - name: Lucy
      age: 26
    - name: James
      age: 24
 

Это то, чего я хотел бы достичь:

 @ConfigurationProperties("shop")
public class ShopProperties() {
    private String name;
    private JsonNode customers;
}
 

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

1. Я не уверен, как вы хотите отобразить в JsonNode? можете ли вы сказать нам, каков ваш ожидаемый результат? похоже, вы ищете какое-то требование и ответ

2. @Deadpool Я добавил то, чего я пытаюсь достичь. Просто интересно, есть ли аккуратный способ сделать это весной, о котором я не знаю.

3. почему именно JsonNode или почему Map<String,String> ?

4. В моем примере customers это массив. Но также возможно, что это может быть карта или даже просто строка. Поэтому мне нужно привязать его к объекту, который может вместить все эти случаи, например JsonNode .

Ответ №1:

Поскольку customers application.yml они находятся в формате массива объектов, я бы рекомендовал либо собрать их в List<Customer> , либо List<Map<String,Object>> использовать приведенный ниже код, @Data — это аннотация lombok, если вы не используете lombok, добавьте геттеры и сеттеры

 @ConfigurationProperties("shop")
@Data
@Configuration
public class TestConfig {

    private String name;
    private List<Map<String,Object>> customers;  //[{name=Lucy, age=26}, {name=James, age=24}]
 }