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

问题描述 投票:0回答:3

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

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

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

java spring-boot controller
3个回答
1
投票

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

了解 HTTP 实际如何传输数据非常有帮助。

如果您的请求使用 GET 作为请求方法,参数将作为查询字符串添加到 URL。可能看起来像这样:

http://example.com/index?param1=value1&param2=value2

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

如果您使用POST,数据将在请求正文内发送。编码方式取决于数据的媒体类型。例如,默认媒体类型

application/x-www-form-urlencoded
会将数据编码为与上面相同的查询字符串。

如果您想上传混合类型的表单数据(例如文件/blob)以及一些文本参数,则您的数据应使用

multipart/form-data
进行编码。

只要请求体包含键值格式,Spring Boot仍然能够通过

@RequestParam
区分和映射参数(如果键与你的属性名称没有不同,你甚至不需要为
value
属性指定名称)。

我强烈建议您查看

@RequestBody
@RequestPart
注释,因为我认为对整个请求主体(或者更确切地说,语义上的形式)使用模型类(DTO)通常是最佳实践,尤其是如果有很多参数需要处理。


0
投票

您需要指定变量的名称。

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

0
投票
@PostMapping(path = "/api/applyjob", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE
    })
    ResponseEntity<HashMap<String, Object>> applyJob(HttpServletRequest request,
            @RequestParam(required = false, name = "resumeType") String resumeType,
            @RequestParam(required = false, name = "saveas") String saveAs,
            @RequestPart(required = false, name = "resumefile") MultipartFile resumeFile,
            @RequestPart(required = false, name = "coverfile") MultipartFile coverFile) {
...
}
© www.soinside.com 2019 - 2024. All rights reserved.