SpringBoot 中 yml 文件中自定义参数解析对象

在SpringBoot中通过自定义参数可以实现很多重要的功能来达到解耦。SpringBoot 自定义参数的类型有 简单键值对自定义对象数组ListMapList<Map>。接下来我们慢慢将其道来。

首先我们编写yml文件,在其中定义:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 自定义参数
cus:
  val: 张三
  bean: 
    id: 20
    name: 张三
  arr1: 1, 3, 4
  arr2: [1, 3, 4]
  list:
    - lista
    - listb
  map:
    a: mapa
    b: mapb
  listmap:
    - a: a
      b: b
      c: c
    - d: d
      e: e
      f: f

1. 获取yml自定义参数中的键值对

    方式一:使用注解 @Value 来获取

1
2
@Value("${cus.val}")
private String cusVal;

    注意:在${}中不能有空格。
  方式二:这里先暂时卖个关子,因为方式二是通用的获取方式,最后统一说明。

2. 获取yml自定义参数中的数组

    方式一:使用注解 @Value 来获取

1
2
@Value("${cus.arr1}")
private String cusVal;

    注意:在${}中不能有空格。对于没与使用”[]“括起来的数组可以使用方式一来获取,而使用了”[]“括起来的数组只能用方式二获取
  方式二:这里先暂时卖个关子,因为方式二是通用的获取方式,最后统一说明。

3. 配置文件中其他获取

    配置文件中其他文件就不能使用简单的 @Value 注解来获取,需要使用如下方式获取。使用如下方式可获取:

  1. 获取yml自定义参数中的键值对,对应上面配置文件的 val
  2. 获取yml自定义参数中的数组,对应上面配置文件的 arr1,arr2
  3. 获取yml自定义参数中的对象,对应上面配置文件的 bean 对象
  4. 获取yml自定义参数中的List,对应上面配置文件的 list
  5. 获取yml自定义参数中Map<Object,Object>,对应上面配置文件的 map
  6. 获取yml自定义参数中List<Map<Object,Object»,对应上面配置文件的 listmap

    第一步首先定义一个如下格式的类,
  具体格式
(1)其中的成员变量名称需要与配置的自定义参数名称一致
(2)每个成员变量必须要有 get/set 方法
(3)该类使用注解 @Component@ConfigurationProperties 修饰

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package com.config;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import com.bean.User;

/**
* @Description 获取yml中自定义的参数
* @author 欧阳
* @since 2019年4月7日 下午1:48:27
* @version V1.0
*/
@Component
@ConfigurationProperties(prefix="cus")
public class CustomParam {

	private String val;
	private User bean;
	private String[] arr1;
	private String[] arr2;
	private List<String> list;
	private Map<String, String> map;
	private List<Map<String, String>> listmap;

	public String getVal() {
		return val;
	}
	public void setVal(String val) {
		this.val = val;
	}
	public User getBean() {
		return bean;
	}
	public void setBean(User bean) {
		this.bean = bean;
	}

	public String[] getArr1() {
		return arr1;
	}
	public void setArr1(String[] arr1) {
		this.arr1 = arr1;
	}
	public String[] getArr2() {
		return arr2;
	}
	public void setArr2(String[] arr2) {
		this.arr2 = arr2;
	}
	public List<String> getList() {
		return list;
	}
	public void setList(List<String> list) {
		this.list = list;
	}
	public Map<String, String> getMap() {
		return map;
	}
	public void setMap(Map<String, String> map) {
		this.map = map;
	}
	public List<Map<String, String>> getListmap() {
		return listmap;
	}
	public void setListmap(List<Map<String, String>> listmap) {
		this.listmap = listmap;
	}
	@Override
	public String toString() {
		return "CustomParam [val=" + val + ", bean=" + bean + ", arr1=" + Arrays.toString(arr1) + ", arr2="
				+ Arrays.toString(arr2) + ", list=" + list + ", map=" + map + ", listmap=" + listmap + "]";
	}

}

  第二步在需要使用的地方使用 @Autowired 注解,自动注入来使用。Map 可改为 Object 对象

1
2
@Autowired
private CustomParam customParam;

  以上就是获取各类自定义参数的方式。