Spring Mvc文件上传@RequestPart和@RequestParam区别

Spring Mvc文件上传@RequestPart和@RequestParam区别

hb0730 27 2023-08-29

Spring Mvc文件上传@RequestPart和@RequestParam区别

@RequestPart(主要用来接收文件)

/**
 * 单文件上传
 * @param file
 * @param bucket
 * @return
 */
@RequestMapping("uploadFile")
public JsonResult uploadFile(@RequestPart("file") MultipartFile file, @RequestParam String bucket){

    String fileUrl = aliossService.uploadFile(file, bucket);
    Map<String,String> result = new HashMap<>();
    result.put("fileUrl",fileUrl);

    return success(result);
}
  1. @RequestPart这个注解用在multipart/form-data表单提交请求的方法上。
  2. 支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的

@RequestParam(一个方法中能使用多次)

/**
 * 单文件上传
 * @param stringFile
 * @param bucket
 * @return
 */
@RequestMapping("uploadStringFile")
public JsonResult uploadStringFile(@RequestParam("file") MultipartFile file, @RequestParam("bucket") String bucket){

   String fileUrl = aliossService.uploadFile(file, bucket);
    Map<String,String> result = new HashMap<>();
    result.put("fileUrl",fileUrl);

    return success(result);
}
  1. 用来处理Content-Type:application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

  2. RequestParam可以接受简单类型的属性,也可以接受对象类型。 实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

  3. Content-Type: application/x-www-form-urlencoded的请求中, GET方式中queryString的值,和POST方式中 body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。

区别

  1. @RequestPart这个注解用在multipart/form-data表单提交请求的方法上。 支持的请求方法的方式MultipartFile,属于SpringMultipartResolver类。这个请求是通过http协议传输的。
  2. @RequestParam也同样支持multipart/form-data请求。(即两者都能用于后端接收文件) 他们最大的不同是,当请求方法的请求参数类型不再是String类型的时候。
  3. @RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)。

文件参考