必需的字符串参数';文件';将数据提交到我的springboot应用程序时不存在()
在我的控制器中,我有一个接收数据的方法必需的字符串参数';文件';将数据提交到我的springboot应用程序时不存在(),spring,spring-boot,file-upload,multipartform-data,Spring,Spring Boot,File Upload,Multipartform Data,在我的控制器中,我有一个接收数据的方法 @RequestMapping(path = "/takemyvid", method = RequestMethod.POST) public String upload2(@RequestParam("summary") String summary, @RequestPart("file") MultipartFile file) { System.out.println(file); System.out.print
@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 [...]
}
<>这是可行的,但是你应该考虑对端点进行更好的命名。code>takemyvid看起来不太正确
编辑
我刚注意到你有一些头球。如果内容类型
设置为多部分,请将其删除,因为它可能导致多部分文件边界出现异常。邮递员将自行处理。处理所需参数与可选请求参数
消息所需字符串参数'summary'不存在
显示,默认情况下,@RequestParam String summary
为Required=true
-请参阅
如果希望将API端点设计为具有摘要作为可选,则设置@RequestParam(required=false)
处理文件上载
由于您使用的是表单(键值对),我建议使用@RequestParam
注释文件参数,并让Spring处理到指定参数类型MultipartFile
的转换
见:
请注意,@RequestParam注释还可用于将“多部分/表单数据”请求的一部分与支持相同方法参数类型的方法参数相关联。主要区别在于,当方法参数不是字符串或原始多部分文件/部分时,@RequestParam依赖于通过注册转换器或PropertyEditor进行的类型转换,而RequestPart依赖于HttpMessageConverters,同时考虑到请求部分的“内容类型”头RequestParam可能与名称值表单字段一起使用,而RequestPart可能与包含更复杂内容的部分一起使用,例如JSON、XML)
另请参见Spring Boot Docs,版本2.1.2,第78.5节这只适用于一个字符串参数,请您使用我的示例演示一下。请同时发布您的请求标题(在postman中设置)。它们将影响Spring处理/转换请求参数/正文的方式。看,你试过我的解决方案了吗?它起作用了吗@IsaacK@Pijotrek,感谢您的回答,但属性为null,因此logger line引发了null指针异常。您是否使用getter和setter创建了Dto类?您确定字段名等于您在“邮递员”中发送的字段名吗?我尝试了我的解决方案,效果非常好!从设计角度来看,强烈建议使用此单一DTO参数(有助于进一步处理)以及面向资源的URL重新设计(例如,发布到
/videos
或/videos/uploads
-显示端点的意图)。感谢建议人员,暂时不要担心端点的名称,@Pijotrek,它在访问对象属性时引发空指针异常