【发布时间】:2013-03-08 00:34:32
【问题描述】:
我正在尝试将一些数据从客户端发送到服务器,并将其处理为文件下载。 我正在使用一个简单的 HTML 表单,因为我想初始化文件下载(而不是 AJAX)。 其中一个表单字段是一个项目数组。 (另外两个是名称和描述字符串)。 在提交表单之前,我将此字段序列化为字符串 (JSON.stringify)。
在服务器端,我尝试了上百万种技术(@ModelAttribute 与 @RequestBody,不同的杰克逊映射 bean 配置)将其转换为单一类型或三种单独的类型(字符串 + 字符串 + 列表/数组)。
我找到的示例仅适用于 AJAX... 任何人都可以提供一个工作示例或描述吗?
=======
更新: 我已经通过 JSON.stringify-ing 集合并将其传递到其中一个输入中实现了一种解决方法, 在服务器端我有:
@RequestMapping(method = RequestMethod.POST, value = "exportSectionsToExcel")
public HttpEntity<byte[]> createExcelWorkBook(@ModelAttribute ExportSectionsListForm exportSectionsListForm) {
Section[] sectionObjects = gson.fromJson(exportSectionsListForm.getSections(), Section[].class);
...
ExportSectionsListForm 对象仅包含字符串:
public class ExportSectionsListForm {
private String name;
private String url;
private String rssUrl;
private String sections;
...
(omitting ctor, getters and setters)
此外,我发现了这个有希望的链接: http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/ 但没有尝试过 - 似乎我需要动态生成输入元素才能工作,但它实际上可能是正确的解决方案。有人试过吗?
【问题讨论】:
-
请问您的控制器代码好吗?
-
我尝试了多种技术 - 每种技术都会导致不同的问题,但都没有奏效 - 所以我正在寻找一个可行的例子......
-
因为我不在办公室,所以不能提供我的代码,但我建议你在你的控制器方法中添加断点,并检查请求中存储了哪些类型的数据?
-
谢谢。我通常要么得到几个例外之一,要么得到一个空数组/列表。我正在寻找一种解决方案,其中包括(1)客户端序列化(json?方括号数组项,如 item[1]、item[2] 等?)和(2)带注释的控制器方法签名 + bean配置。
-
您可以使用 firebug 来检查您发送给控制器的数据。
标签: spring-mvc deserialization forms