浅谈MultiValueMap

最大特点:一key,多value

先看如下代码:

public static void main(String[] args) {
    MultiValueMap<String, String> valueMap = new LinkedMultiValueMap<>();
    valueMap.add("1","1");
    valueMap.add("1","2");
    valueMap.add("1","3");
    valueMap.add("1","4");
    valueMap.add("1","5");
    valueMap.add("2","1");
    valueMap.add("2","2");
    valueMap.add("3","1");
    for (Map.Entry<String, List<String>> stringListEntry : valueMap.entrySet()) {
        System.out.println(“key:”+stringListEntry.getKey());
        List<String> value = stringListEntry.getValue();
        System.out.println("value:"+value);
    }
}

输出:

key:1
value:[1, 2, 3, 4, 5]
key:2
value:[1, 2]
key:3
value:[1]

 

我在SpringBoot中可能遇到的情况:

假如有如下url:(可能有个复选框,让你选你的兴趣inters,你选了两个 basketball和 game)

http://localhost:8080/car/3/owner/lisi?age=18&inters=basketball&inters=game

 

如果用@Requestparam + map接收所有参数 :

 

 

 

 

你得到的结果是这样的(发现params 里面并没有game)

 

 

 但是你用MultiValueMap去接收:

 

 

 

你得到:

 

你会发现MultiValueMap的value都是list类型,为什么呢?

你点进去一看:

 

 

 哦,这样啊,那没事了。

 

总结:

1. 如果遇到 一键多值的需求, 要考虑下MultiValueMap,

2. 问题的最根本其实是 如果存在参数有时候既要一对一,又要一对多的时候,可以考虑让value转型,转型为list(更高维度), (一对一其实也是一对多的特殊情况,你只需要让一个value一组即可,就好像SpringBoot设计的MultiValueMap,

既能满足
"age":["18"]
又能满足
"inters":["basketball","game"]

 

posted @ 2021-09-20 15:12  PocketHeart  阅读(3610)  评论(0编辑  收藏  举报