MultiValueMap

2019-03-13  本文已影响0人  常扬

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

MultiValueMap 是什么

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


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);

}

上一篇下一篇

猜你喜欢

热点阅读