美文网首页
MultiValueMap

MultiValueMap

作者: 常扬 | 来源:发表于2019-03-13 16:42 被阅读0次

最近在工作中,遇到一个特殊的Map —— MultiValueMap,它到底是什么呢?写一篇博客记录下所找到的线索。

MultiValueMap 是什么

MultiValueMap 是一个继承Map的接口,一个Key可以对应多个Value

  • 对应源码 包spring-core-5.0.7.RELEASE.jar

public interface MultiValueMap<K, V> extends Map<K, List<V>> {

@Nullable

    V 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 {

...

...

...

@Override

    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

    MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();

    // 获取authToken

    String authToken = params.getFirst("authToken");

    // 获取sign

    String 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

    在日常的开发中经常用到键值对,也就是Map啦,我们知道Map是一个接口,它的特点是一个Key对应一个Value,也...

  • MultiValueMap

    最近在工作中,遇到一个特殊的Map —— MultiValueMap,它到底是什么呢?写一篇博客记录下所找到的线索...

网友评论

      本文标题:MultiValueMap

      本文链接:https://www.haomeiwen.com/subject/dtetmqtx.html