使用@RequestBody Map<String,Object>接受JSON,数组却变成了Arraylist,这是为什么?

在Controller 中写了个方法:

 @PostMapping("/test1")
public String test1(@RequestBody Map<String,Object> map){
    //String[] imgs = (String[]) map.get("imgs"); //java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Ljava.lang.String;
    ArrayList<String> imgs = (ArrayList<String>) map.get("imgs");
    String name = (String) map.get("name");
    String str1 = "";

    for (String str: imgs) {
        System.err.println(str);
        str1 = str1+"参数:"+str+"\n";
    }
    return "姓名:"+name+"\n"+str1;
}

请求内容:

    {
"name": "weiwei",
"imgs": [
    "abc",
    "123",
    "/*-"
]

}

如果我使用
    String[] imgs = (String[]) map.get("imgs")
去获取传过来的数组就会报错:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Ljava.lang.String;
说ArrayList不能转换成String[];
我JSON中的内容传的是一个数组呀,为什么变成ArrayList了?
DIEA
浏览 952回答 2
2回答

喵喔喔

@RequsetBody会读取request的body数据,之后会调用MappingJackson2HttpMessageConverter解析数据,会使用到ObjectMapper,之后this.objectMapper.readValue(inputMessage.getBody(), javaType);javaType是AbstractJackson2HttpMessageConverter中getJavaType优选出来可以解析context的类型.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java