Spring 引导控制器多个参数(<List> 和多部分文件)对象

Spring Boot Controller Multiple parameters (<List> and multipart file) object

你好,我正在寻找是否可以仅使用一个 RestController 方法处理多个参数... 使用控制器方法可以完成...但我找不到类似 2 的项目。

@PostMapping(value ="upload")
    public upload(@RequestParam MultipartFile file,@RequestParam List<String> myParams ){
     some code here ....
        return;
    }

我只是想知道这是否也是一种好的做法...在同一个控制器中使用两种不同类型的对象,如果可能的话,有什么想法吗????

您需要指定变量的名称。

  @PostMapping(value ="upload")
  public upload(
    @RequestParam(value = "file") MultipartFile file, 
    @RequestParam(value = "myParams") List<String> myParams 
  ){
      some code here ....
      return;
   }

简单回答:是的,这是可能的。
但是当你要求好的做法时,这里有一些背景:

了解 HTTP 实际传输数据的方式非常有帮助。

如果您的请求使用 GET 作为请求方法,参数将作为查询字符串添加到 URL。可能看起来像这样:http://example.com/index?param1=value1&param2=value2

在这种情况下,Spring 将键值对从查询字符串映射到您的方法参数。但这仅适用于文本。

如果您使用 POST,数据将在请求正文中发送。编码方式取决于数据的媒体类型。例如,默认媒体类型 application/x-www-form-urlencoded 会将数据编码为与上述相同的查询字符串。

如果您想上传 file/blob 等混合类型的表单数据以及一些文本参数,您的数据应使用 multipart/form-data.

编码

只要请求体包含键值格式,Spring Boot 仍然可以通过 @RequestParam 区分和映射参数(如果键与您的不同属性名称,您甚至不需要为 value 属性分配名称)。

我强烈建议您查看 @RequestBody@RequestPart 注释,因为我认为最好的做法是对整个模型使用 class (DTO)请求正文(或者更确切地说是语义上的形式),尤其是在有很多参数要处理的情况下。