Spring:Multipart表单数据请求:从请求中读取动态参数

时间:2013-11-07 08:01:15

标签: java spring spring-mvc

我正在使用Spring框架并能够成功上传服务器上的文件。

<form action="upload.do" method="post" enctype="multipart/form-data">
    <input type="text" name="description" />
    <input type="file" name="locationMapFile" />
    ........
    ........
    <input type="submit" />
</form>

// controller layer

@RequestMapping(value = "/upload.do", method = {RequestMethod.POST})
public String addEditLocationToCompany(Model model
   ,@RequestParam("description")String desc
   ,@RequestParam(value="locationMapFile", required=false) CommonsMultipartFile locationMapFileData)
{

}
直到现在一切都很好。 现在我使用javascript在表单上添加一些动态隐藏参数。

注意:根据设置,我定义了动态参数名称及其值,如

<input type="hidden" name="setting_14" value="abcd"> 
<input type="hidden" name="setting_5" value="xyz"> 

如何将这些动态参数提取到Spring控制器中。

我试过了

(1)我不能使用@RequestParam,因为不想硬编码参数名称

(2)request.getParameter():不工作并返回null,因为这是multipart / form-data请求

(3)我使用过此链接 的 How to upload files to server using JSP/Servlet? 并试过

List<FileItem> items = 
       new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);

但是在spring控制器项目为空。所以无法迭代它并从中获取FileItem。

请帮我找出将动态参数的值输入spring框架的方法。

2 个答案:

答案 0 :(得分:10)

您可以使用MultipartHttpServletRequest获取请求参数:

@RequestMapping(value = "/upload.do", method = {RequestMethod.POST})
public String addEditLocationToCompany(Model model
   ,@RequestParam("description")String desc
   ,@RequestParam(value="locationMapFile", required=false) CommonsMultipartFile locationMapFileData, MultipartHttpServletRequest mrequest)
{
String value = mrequest.getParameter("setting_14");
}

答案 1 :(得分:0)

为什么不添加一个隐藏字段并通过连接所需的所有设置值来设置它的值? 正如您所说,您正在使用javascript添加这些输入字段。 它看起来像

<input type="hidden" name="setting" value="set1.value, set2.value, set3.value">

然后,您可以自由地在setting

中对@RequestParam参数进行硬编码