MultiValueMap
文章目录
- MultiValueMap
- MultiValueMap 是什么
- MultiValueMap 一个Key对应多个Value
- Spring Cloud Gateway GlobalFilter 过滤器中的MultiValueMap
- 获取请求值
- 其它的用法(插入值和迭代)
MultiValueMap
最近在工作中,遇到一个特殊的Map —— MultiValueMap,它到底是什么呢?写一篇博客记录下所找到的线索。
MultiValueMap 是什么
MultiValueMap 是一个继承Map的接口,一个Key可以对应多个Value
- 对应源码
包spring-core-5.0.7.RELEASE.jar
public interface MultiValueMap<K, V> extends Map<K, List<V>> {@NullableV getFirst(K var1);void add(K var1, @Nullable V var2);void addAll(K var1, List<? extends V> var2);void addAll(MultiValueMap<K, V> var1);void set(K var1, @Nullable V var2);void setAll(Map<K, V> var1);Map<K, V> toSingleValueMap();
}
MultiValueMap 一个Key对应多个Value
- 示例
// 实例化
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
// 为name放入3个值
params.add("name", "Name参数1");
params.add("name", "Name参数2");
params.add("name", "Name参数3");
// 打印第三个参数
System.out.println(params.get("name").get(2));// 放入id一个idList
List idList = new ArrayList();
idList.add(UUID.randomUUID().toString().replaceAll("-",""));
idList.add(UUID.randomUUID().toString().replaceAll("-",""));
idList.add(UUID.randomUUID().toString().replaceAll("-",""));
params.put("id", idList);
// 打印第三个参数
System.out.println(params.get("id").get(2));// 打印所有值
Set<String> keySet = params.keySet();
for (String key : keySet) {List<String> values = ((LinkedMultiValueMap<String, String>) params).get(key);for (String value : values) {System.out.println(key + ": " + value);}
}
Spring Cloud Gateway GlobalFilter 过滤器中的MultiValueMap
获取请求值
@Component
public class AuthSignatureFilter implements GlobalFilter, Ordered {.........@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();// 获取authTokenString authToken = params.getFirst("authToken");// 获取signString sign = params.getFirst("sign");// 我们取到值,可以进行验证了.........return chain.filter(exchange);}
}
其它的用法(插入值和迭代)
- 代码如下:
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();multiValueMap.add("k1", "v1");
multiValueMap.add("k2", "v2");//打印所有值
Set<String> keySet = multiValueMap.keySet();
for (String key : keySet) {List<String> values = multiValueMap.get(key);System.out.println(StringUtils.join(values.toArray()," ")+":"+key);
}
MultiValueMap相关推荐
- java multivaluemap_java – 使用自定义值集合类型创建Commons Collections MultiValueMap
Apache Commons Collections库的4.0版本增加了泛型支持.我无法转换代码以利用它: 我想要一个MultiValueMap,它将String作为键,并将一个字符串集合作为值.但: ...
- Map之一个Key存多个Value的MultiValueMap(一个键多个值)
在日常的开发中经常用到键值对,也就是Map啦,我们知道Map是一个接口,它的特点是一个Key对应一个Value,也就是一个键对应一个值,但是往往我们需要一个Key对应多个Value,这种时候系统的AP ...
- MultiValueMap是什么?怎么使用?
MultiValueMap 可以同一个key下面放多个value,此类来自spring,在spring-core里面 代码: public static void main(String[] args ...
- Spring RestTemplate为何必须搭配MultiValueMap?
微服务之间的大多都是使用 HTTP 通信,这自然少不了使用 HttpClient. 在不适用 Spring 前,一般使用 Apache HttpClient 和 Ok HttpClient 等,而一旦 ...
- Http请求之优雅的RestTemplate
前言 本篇博客为对RestTemplate总结 HttpURLConnection 在讲RestTemplate之前我们来看看再没有RestTemplate之前是怎么发送http请求的. privat ...
- jquery发送put请求_浅谈GET,POST,PUT发送请求
一般我们在浏览器的地址栏输入网址回车后,发送的是GET请求 当用表单提交时(最普遍的是用户登录),我们可以指定是GET还是POST请求,这里需要注意的是有的浏览器并不支持PUT请求,那后台restfu ...
- java单元测试启动类配置_Springboot 单元测试简单介绍和启动所有测试类的方法
最近一段时间都是在补之前的技术债,一直忙着写业务代码没有注重代码的质量,leader也在强求,所有要把单元测试搞起来了 我把单元测试分为两种 一个是service的单元测试,一个是controller ...
- spring boot 2.0 源码分析(二)
在上一章学习了spring boot 2.0启动的大概流程以后,今天我们来深挖一下SpringApplication实例变量的run函数. 先把这段run函数的代码贴出来: /*** Run the ...
- SpringBoot之@EnableConfigurationProperties分析
我们在用SpringBoot进行项目开发的时候,基本上都使用过@ConfigurationProperties这个注解,我们在之前的文章中也说过ConfigurationPropertiesBindi ...
最新文章
- 利用尾递归减少栈空间的消耗
- glide 显示图片慢_做个看图片的App玩玩_第一篇
- [设计模式][c++]状态切换模式
- [你必须知道的.NET] 开篇有益
- 10大反直觉的数学结论
- linux多CPU进程负载均衡解析
- Rust : 危险! 关于字符串切片以及取值......
- Java 实现树结构计算各个节点数的和
- Eclipse中,使用Darkest主题,static方法在main中不是斜体的解决办法
- 【突破次元壁】谁说二次元离我们遥远?Python特效火遍全网,关键技术原来是它。
- Qos介绍及功能->分类标记->流量管理(令牌桶)->拥塞管理与拥塞避免
- SMILES 与 SELFIES 的转换代码
- 数据湖和数据仓库的区别是什么?
- c语言二维数组输入数据,c语言编写程序,把下面的数据输入到一个二维数组中:...
- 高通正式发布骁龙 778G 5G 芯片
- 即将打破x86和ARM垄断地位的RISC-V,你了解吗?
- js计算当前时间的为年的第几周,以及周对应的时间范围
- 常用的Linux外文文献,Linux大学外文文献翻译及原文.doc
- CCFL、WLED、RGB LED背光液晶屏优缺点
- 四旋翼无人机学习第23节--原理图与PCB库开源计划