当前位置: 首页 > 知识库问答 >
问题:

使用MultipartFile作为可选字段的多部分请求-Spring MVC

阴高刚
2023-03-14

我在一个J2EE Web应用程序上使用Spring MVC
我创建了一个方法,它将请求主体绑定到一个类似于上面的模型

@RequestMapping(value = "/", method = RequestMethod.POST, produces = "application/json")
public AModel createEntity(@Valid @ModelAttribute MyInsertForm myInsertForm) {
    // coding..
}  

一切都工作得很好,当我在MyEntityForm中包含MultipartFile类型的属性时,我必须使用内容类型“multiPart/form-data”发出请求。
此外,在这个场景中一切都工作得很好。

我面临的问题是,我希望将MultipartFile属性设置为可选的。
当客户端请求包含一个文件时,我的方法工作得很好,但当客户端请求不包含一个文件时,spring抛出一个

HTTP状态500-请求处理失败;嵌套异常是org.springframework.web.multipart.multipartException:无法解析多部分servlet请求;嵌套异常是org.apache.commons.fileupload.fileuploadException:流意外结束

有没有什么方法可以解决这个问题而不在我的控制器上创建两个方法(一个带有MultipartFile,另一个没有)?

共有1个答案

尉迟墨竹
2023-03-14

我也遇到了同样的问题,只需添加required=false就可以了;因为,我不是一直发文件。请找到下面的示例代码,

@RequestMapping(value = "/", method = RequestMethod.POST, produces = "application/json")
public AModel createEntity(@Valid @ModelAttribute MyInsertForm myInsertForm, @RequestParam(value ="file", required=false) MultipartFile file) {
    // coding..
}  
 类似资料:
  • 在我的Spring Boot应用程序中,我需要将String值与MultipartFile一起作为传递。Controller在下面,我将MultipartFile转换为,然后在的帮助下将其传递给DAO Controller。 来自Angular的请求将首先命中Upload Controller,然后UploadController是客户端(Java),它将使用基URL调用服务器svs-ba-dao

  • 我有像4天,试图提出一个多部分的请求使用改型1.8.0在android与任何成功。我的界面如下所示 最后,我决定这样做,其实我的答案很接近@lazypig,这是一个很好的指导方针 我唯一改变的是他的类“ByteArrayTypedOutput” 我创建了一个名为“MultipartTypedOutputCustom”的类http://pastie.org/10549360

  • 我想用Spring MVC发布一个包含一些JSON数据的文件。所以我开发了一个rest服务作为

  • 问题内容: 我有一个API端点,必须向其发送多部分HTTP请求,该请求由两部分组成(文件系统文件)和(JSON对象)。 经过一些研究,我发现了如何在AngularJS中执行多部分请求: 1) 该函数最初具有以下形式: 此实现的结果是,请求的各个部分没有设置。 Blob ,对象看起来像这样(有点混乱,基本上第一部分是of ,第二个): 第二种方法为请求的每个部分设置了正确的内容,但没有为部分设置任何

  • 我正在使用Multipart执行帖子类型请求。问题是因为我一直收到两个错误 1) 500 2) 422不可处理实体 Api仅接受音乐文件。因此,我添加了一个默认文件,以避免不断选择新文件 和我的界面 如果有任何帮助,我将不胜感激。 我发现它将文件作为对象通过Reform2发送到服务器

  • 问题内容: 我有以下POST请求表格(简化): 我尝试发送POST请求: 但它返回状态并带有以下注释: 请指出我的错误。我应该进行哪些更改才能使其正常工作? 问题答案: 您自己设置标题,包括边界。不要这样 会为您生成一个边界并将其设置在标头中,但是如果您 已经 设置了标头,那么生成的有效负载和标头将不匹配。只需将标题全部放下即可: 请注意,我还给了零件一个文件名(路径的基本名称)。 有关多部分PO