返回

yml文件中的list列表、数组、map集合和对象便捷读取方法

后端

无缝读取 YAML 文件中的多类型参数,提升开发效率

在 Spring Boot 应用中,配置各种参数和属性是家常便饭。而这些参数类型丰富多样,从简单值到复杂数据结构,如列表、数组、集合和对象。要高效地读取这些数据,我们需要借助 Spring Boot 提供的强大功能。

探寻不同类型参数的读取方法

1. 读取列表

读取列表时,@Value 注解派上用场。在需要读取的字段上标注 @Value,并指定 YAML 文件中的 key,Spring Boot 会自动将对应值注入该字段。

@Value("${list}")
private List<String> list;

2. 读取数组

数组的读取与列表类似,使用 @Value 注解和数组类型即可。

@Value("${array}")
private String[] array;

3. 读取集合

对于集合,我们依然使用 @Value 注解,并搭配 Map 类型。

@Value("${map}")
private Map<String, String> map;

4. 读取对象

要读取对象,@ConfigurationProperties 注解闪亮登场。在需要读取的类上添加该注解,并指定 YAML 文件中的前缀,Spring Boot 会自动注入对应值。

@ConfigurationProperties(prefix = "object")
public class Object {

    private String name;

    private int age;

    // getter and setter methods
}

示例代码一览

# application.yml
list:
  - item1
  - item2
  - item3

array:
  - item1
  - item2
  - item3

map:
  key1: value1
  key2: value2

object:
  name: John
  age: 30
// Application.java
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

// ListController.java
@RestController
@RequestMapping("/list")
public class ListController {

    @Value("${list}")
    private List<String> list;

    @GetMapping
    public List<String> getList() {
        return list;
    }
}

// ArrayController.java
@RestController
@RequestMapping("/array")
public class ArrayController {

    @Value("${array}")
    private String[] array;

    @GetMapping
    public String[] getArray() {
        return array;
    }
}

// MapController.java
@RestController
@RequestMapping("/map")
public class MapController {

    @Value("${map}")
    private Map<String, String> map;

    @GetMapping
    public Map<String, String> getMap() {
        return map;
    }
}

// ObjectController.java
@RestController
@RequestMapping("/object")
public class ObjectController {

    @ConfigurationProperties(prefix = "object")
    private Object object;

    @GetMapping
    public Object getObject() {
        return object;
    }
}

结语

通过这些便捷的方法,我们可以轻松读取 YAML 文件中的各种类型参数,大大提升开发效率,让我们把更多精力集中在业务逻辑上。

常见问题解答

  1. 问:我可以读取 YAML 文件中的嵌套结构吗?
    答:可以。使用 Spring Boot 的 @ConfigurationProperties 注解,可以实现嵌套结构的读取。

  2. 问:如何处理 YAML 文件中不存在的参数?
    答:可以使用 @DefaultValue 注解指定默认值,这样在文件不存在该参数时,字段不会为 null。

  3. 问:如何使用 YAML 文件中的值动态设置 bean 的属性?
    答:可以使用 Spring EL 表达式,在 bean 的属性中引用 YAML 文件中的值。

  4. 问:读取 YAML 文件时有什么性能考虑因素?
    答:读取 YAML 文件的性能通常较好,但随着文件大小和复杂度的增加,性能也会受到影响。

  5. 问:我可以在代码中直接操作 YAML 文件吗?
    答:可以使用 SnakeYAML 或 YamlBeans 等第三方库,在代码中直接操作 YAML 文件。