必需的字符串参数';文件';将数据提交到我的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,它在访问对象属性时引发空指针异常