向我的spring启动应用程序提交数据时,必需的字符串参数'file'不存在()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向我的spring启动应用程序提交数据时,必需的字符串参数'file'不存在()相关的知识,希望对你有一定的参考价值。
在我的控制器中,我有这种接收数据的方法
@RequestMapping(path = "/takemyvid", method = RequestMethod.POST)
public String upload2(@RequestParam("summary") String summary, @RequestPart("file") MultipartFile file) {
System.out.println(file);
System.out.println(summary);
return "";
}
但是,当我使用具有正确参数的邮递员测试时,我收到错误
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'summary' is not present]
即使我只包含该文件,也会发生这种情况。
我已在属性文件中设置了最大文件大小。
spring.servlet.multipart.max-file-size=128MB
spring.servlet.multipart.max-request-size=128MB
使用Spring Boot 2.1.2.RELEASE版。
我在方法参数中使用了@ModelAttribute
注释:
@RestController
public class UploadController {
private static final Logger logger = LoggerFactory.getLogger(UploadController.class);
@RequestMapping(path = "/takemyvid", method = RequestMethod.POST)
public void upload2(@ModelAttribute FileUploadDto fileUploadDto) {
logger.info("File uploaded, summary = {}, fileSize = {} bytes", fileUploadDto.getSummary(), fileUploadDto.getFile().getSize());
}
}
我也像这样创建了Dto类:
public class FileUploadDto {
private String summary;
private MultipartFile file;
//getters, setters, whatevers [...]
}
这样它应该可以工作,但你应该考虑更好地命名你的端点。 takemyvid
看起来不太对劲。
edit
我刚刚注意到你有一些标题集。如果它的Content-Type
设置为Multipart,那么请删除它,因为它可能导致和多部分文件边界的异常。邮差将自己处理它。
处理所需的VS可选请求参数
消息Required String parameter 'summary' is not present
显示,你的@RequestParam String summary
默认是required = true
- 请参阅java-docs。
如果您想设计API端点以将摘要设置为可选,则设置@RequestParam(required = false)
。
处理文件上传
由于您使用的是表单(键 - 值对),我建议使用@RequestParam
注释文件参数,并让Spring处理转换为指定的参数类型MultipartFile
。
请注意,@ RequestParam注释还可用于将“multipart / form-data”请求的一部分与支持相同方法参数类型的方法参数相关联。主要区别在于,当method参数不是String或原始MultipartFile / Part时,@ RequestParam依赖于通过已注册的Converter或PropertyEditor进行类型转换,而RequestPart依赖于HttpMessageConverters,同时考虑到请求部分的“Content-Type”标题。 RequestParam可能与名称 - 值表单字段一起使用,而RequestPart可能与包含更复杂内容的部分一起使用,例如JSON,XML)。
另请参见Spring-Boot Docs,版本2.1.2,第78.5节Handling Multipart File Uploads
以上是关于向我的spring启动应用程序提交数据时,必需的字符串参数'file'不存在()的主要内容,如果未能解决你的问题,请参考以下文章
仅当使用引导程序填写所有必需的 attr 字段时,如何提交表单?
Spring 和 Thymeleaf:将对象从 th:each 表发送到控制器
Spring Boot 轮播全屏 html,css,bootstrap