spring引导控制器多参数(< list>和多部分文件)对象

5w9g7ksd  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(281)

你好,我正在寻找,如果我只能处理一个restcontroller方法多个参数。。。用控制器的方法可以做到。。。但我找不到有2个这样的项目。

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

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

e5nqia27

e5nqia271#

您需要指定变量的名称。

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

3zwtqj6y2#

简单回答:是的,这是可能的。
但当你要求良好的实践时,这里有一些背景:
理解http实际上是如何传输数据的非常有帮助。
如果您的请求使用get as request方法,那么参数将作为查询字符串添加到url中。可能是这样的: http://example.com/index?param1=value1&param2=value2 在本例中,spring将查询字符串中的键值对Map到方法参数。但这只适用于文本。
如果您使用的是post,那么数据将在请求主体中发送。其编码方式取决于数据的媒体类型。例如,默认媒体类型 application/x-www-form-urlencoded 将数据编码为与上述相同的查询字符串。
如果您想上传混合类型的表单数据,比如一个文件/blob以及一些文本参数,您的数据应该用 multipart/form-data .
只要请求主体包含键值格式,spring boot仍然能够通过 @RequestParam (如果键与属性名没有区别,则甚至不需要为 value 属性)。
我强烈建议你去看看 @RequestBody 以及 @RequestPart 我认为,最好的做法是对整个请求体(或者更确切地说是语义上的表单)使用模型类(model class,dto),特别是在有大量参数要处理的情况下。

相关问题