【发布时间】:2015-04-19 18:25:51
【问题描述】:
我有一个表单,其中包含一些输入文本字段和一个输入文件字段,用于在我的数据库中注册一些条目。
现在我正在创建另一个表单来编辑相同的条目。我从数据库中检索数据并填写另一个表格,该表格具有与第一个相同的字段。不过,我不填写输入文件值,因为出于安全原因,我不能以编程方式完成。
所以我让用户编辑他想要的任何内容并更新该条目。但是,如果用户不更改文件输入字段,我的代码将提交带有空文件输入的表单,因此我遇到 400(错误请求)错误,因为我的 ajax 请求找不到我的 servlet。
这是一些编码:
在我的控制器类中:
@RequestMapping(value = RestUriConstants.SUBMETER, method = RequestMethod.POST)
public @ResponseBody JsonResponse submeter(@RequestPart("exercicio") final Exercicio exercicio,
@RequestPart("file") final MultipartFile file) {
...
}
还有 Ajax 请求:
var exercicioObject = new Object();
exercicioObject.id = id;
exercicioObject.nome = nome;
exercicioObject.grupo = grupo;
var formData = new FormData();
formData.append("file", file.files[0]);
formData.append('exercicio', new Blob([JSON.stringify(exercicioObject)], {
type : "application/json"
}));
$.ajax({
url : '/Project/exercicio/submeter',
type : 'POST',
dataType : 'text',
data : formData,
processData : false,
contentType : false
});
如您所见,我正在设置一个 Json 对象,该对象将作为 Exercicio 对象传递给服务器,并且该文件将作为 MultipartFile 对象传递。
由于我没有设置任何 MultipartFile 对象,我认为 Spring 没有找到我的 URL,它需要两个参数(Exercicio 和 MultipartFile),但我不知道如何在 MultipartFile 上传递任何内容以使 Spring 重定向我的请求到服务器中的正确方法。
【问题讨论】:
-
您是否尝试设置 @RequestPart(required=false) 以查看它是否调用所需的控制器?
-
好提醒!有用!将此作为您的最终答案发布,我会接受 :) 谢谢
-
作为答案添加。很高兴我能帮上忙。
标签: jquery ajax spring spring-mvc file-upload