在看Zuul的源码(org.springframework.cloud.netflix.zuul.util.RequestContentDataExtractor.java)时发现一个从来没见过的MultiValueMap,点进去才知道这是Spring提供的一个key可以有多个Value的Map集合。
以前为了实现这种效果在代码里声明成类似结构Map<String, List<Object>> map = new HashMap<>()可以被替换了。因为这个MultiValueMap本质上就是通过继承Map加了泛型实现的,看源码
测试代码:
public static void main(String[] args) {
MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap();
multiValueMap.add("北京", "一中");
multiValueMap.add("北京", "二中");
multiValueMap.add("济南", "一小");
multiValueMap.add("北京", "三中");
multiValueMap.add("济南", "二小");
List<Object> list = new ArrayList<>();
list.add("鸡蛋");
list.add("西红柿");
list.add("辣椒");
multiValueMap.put("合肥", list);
multiValueMap.add("测试", "只有一个元素");
for (Object item : multiValueMap.keySet()) {
List<Object> listObj = multiValueMap.get(item);
System.out.println("Key:" + item + "--Value:" + listObj);
}
}
打印结果:
Key:北京--Value:[一中, 二中, 三中]
Key:济南--Value:[一小, 二小]
Key:合肥--Value:[鸡蛋, 西红柿, 辣椒]
Key:测试--Value:[只有一个元素]
Over~~