springMVC带文件的表单数据无法绑定到参数中

在一个带enctype="multipart/form-data"属性的表单提交时发现,该表单中包含的其他input无法设置到对应方法参数中。

如下:

JSP:带enctype="multipart/form-data"属性的表单,包含一个username的input

<form action="${ctx}/console/article/testUpload"
      enctype="multipart/form-data" method="post">
    <input type="text" name="username"/>
    <input type="file" name="uploadFile"/>
    <input type="submit"/>
</form>

Controller:非常普通的两个方法,GET进入页面,POST输出表单中username的值(注意,没有处理uploadFile)。

@RequestMapping(value = "/testUpload", produces = "text/html;charset=utf-8", method = RequestMethod.GET)
public String testUpload() throws Exception {
    return "/uploadFile";
}
@RequestMapping(value = "/testUpload", produces = "text/html;charset=utf-8", method = RequestMethod.POST)
public String testUpload(String username) throws Exception {
    System.out.println(username);
    return "redirect:testUpload";
}

发现如下(以下各点相互独立互不影响):

1、填写username并选择文件后点击提交,username输出为null;

2、去掉表单的enctype属性,填写username并选择文件后点击提交,username输出正常;

3、向POST的方法添加MultipartFile uploadFile参数(修改结果如下),填写username并选择文件后点击提交,报错。

@RequestMapping(value = "/testUpload", produces = "text/html;charset=utf-8", method = RequestMethod.POST)
public String testUpload(String username, MultipartFile uploadFile) throws Exception {
    System.out.println(username);
    return "redirect:testUpload";
}

报错信息如下:



根据以上发现可知:

1、带enctype属性的表单,需要额外配置以解析其中的参数;

2、如果方法中的参数不处理文件,即没有MultipartFile参数,则不报错,也无法获取其他参数。


网上(见最后的链接)找到解决办法,得知需要配置multipartResolver来解析带enctype="multipart/form-data"属性的表单

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="utf-8"></property>
    <property name="maxUploadSize" value="10485760000"></property>
    <property name="maxInMemorySize" value="40960"></property>
</bean>

附:

https://segmentfault.com/q/1010000002786408

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值