在SpringMVC中@RequestParam为什么可以获得文件上传的数据?

在做springmvc文件上传的时候通常都会用这种方法获得上传的文件数据
//desc,file是页面上标签的id属性
@RequestMapping(value="/testUpload",method=RequestMethod.POST)
publicStringtestUpload(@RequestParam(value="desc",required=false)Stringdesc, @RequestParam("file")MultipartFilemultipartFile)throwsIOException{
System.out.println("desc:"+desc);
System.out.println("OriginalFilename:"+multipartFile.getOriginalFilename());
InputStreaminputStream=multipartFile.getInputStream();
System.out.println("inputStream.available():"+inputStream.available());
System.out.println("inputStream:"+inputStream);
 
return"success";
}
但是就我所知@RequestParam是将请求参数映射到请求处理方法的形参中常用来处理简单类型的绑定,用来处理Content-Type:为 application/x-www-form-urlencoded编码的内容。可是文件上传的时候Content-Type:为multipart/form-data,那么为什么此时@RequestParam可以得到文件数据,我个人的理解是MultipartFile的原因,可能是因为springmvc的文件上传解析器起的作用,但是我还是没理解怎么做到的可以认为@RequestParam也可以处理multipart/form-data吗。
烙印99
浏览 2458回答 2
2回答

RISEBY

如果看下spring的源码会发现,spring在参数处理的时候会把Content-Type解析为MediaType,然后由spring框架中注册的具体RequestBodyAdviceAdapter来处理,不同的Content-Type会对应不同的RequestBodyAdviceAdapter。这个实现类实现了对上传文件的解析。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript