带有Ajax文件上传和MultipartFile的Spring MVC


问题内容

我在Spring 3 MVC中使用Ajax上传时遇到问题。我知道我必须在spring config中配置multipartResolver
bean。比我可以拥有这样的控制器

@RequestMapping(value ="/settingsSim")
@ResponseBody
public Map uploadSimSettings(@RequestParam(value="qqfile", required=true) MultipartFile settings) {
 Map<String, Object> ret = new HashMap<String, Object>();
 return ret;
}

问题是,当我实际将请求发送到服务器时(实际上是valums
Ajax文件上传为我完成了此操作),我收到内部服务器错误响应,并且日志中未显示任何内容。我现在真的挠头,因为我无法弄清楚问题所在。


问题答案:

使用valums插件时,我通过使用@RequestBodySpring注释解决了此问题。您可以按以下方式重写代码:

@RequestMapping(value ="/settingsSim",method=RequestMethod.POST)
@ResponseBody
public Map uploadSimSettings(@RequestBody String body) {
 /*
 some controller logic 
 */
}

请注意,该变量body将包含上载文件的内容。此外,您的示例中没有方法声明,这意味着您的方法将映射到GET请求。

PS我在使用Apache
Commons解析请求时也遇到了“无多部分边界”的问题。HttpServletRequest#getParts()仅返回一个空集合。