您好,我正在寻找是否可以仅使用一个 RestController 方法处理多个参数... 使用控制器方法可以完成......但我找不到像这样的2个项目。
@PostMapping(value ="upload")
public upload(@RequestParam MultipartFile file,@RequestParam List<String> myParams ){
some code here ....
return;
}
我只是想知道这是否也是一个好的做法......在同一个控制器中拥有两种不同类型的对象,如果可能的话,,,有什么想法吗???
简单回答:是的,这是可能的。
但当你要求良好的实践时,这里有一些背景:
了解 HTTP 实际如何传输数据非常有帮助。
如果您的请求使用 GET 作为请求方法,参数将作为查询字符串添加到 URL。可能看起来像这样:
http://example.com/index?param1=value1¶m2=value2
在这种情况下,Spring 将查询字符串中的键值对映射到方法参数。但这仅适用于文本。
如果您使用POST,数据将在请求正文内发送。编码方式取决于数据的媒体类型。例如,默认媒体类型
application/x-www-form-urlencoded
会将数据编码为与上面相同的查询字符串。
如果您想上传混合类型的表单数据(例如文件/blob)以及一些文本参数,则您的数据应使用
multipart/form-data
进行编码。
只要请求体包含键值格式,Spring Boot仍然能够通过
@RequestParam
区分和映射参数(如果键与你的属性名称没有不同,你甚至不需要为 value
属性指定名称)。
我强烈建议您查看
@RequestBody
和 @RequestPart
注释,因为我认为对整个请求主体(或者更确切地说,语义上的形式)使用模型类(DTO)通常是最佳实践,尤其是如果有很多参数需要处理。
您需要指定变量的名称。
@PostMapping(value ="upload")
public upload(
@RequestParam(value = "file") MultipartFile file,
@RequestParam(value = "myParams") List<String> myParams
){
some code here ....
return;
}
@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) {
...
}