我一直收到以下错误
org.springframework.web.multipart.support.MissingServletRequestPartException:未找到请求部分'model'。
将多部分请求发布到spring mvc controller。
这是请求:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:4394941
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryK4y8t7mg2SNoYxC4
Cookie:SID=091f182f-5534-47c4-b0c1-8ca9c17e1f09
Host:localhost:8080
Origin:http://localhost:8080
Referer:http://localhost:8080/controller/home/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
X-Requested-With:XMLHttpRequest
Request Payload
------WebKitFormBoundaryK4y8t7mg2SNoYxC4
Content-Disposition: form-data; name="model"
{"name":"kjkjk","description":"kkjkjk"}
------WebKitFormBoundaryK4y8t7mg2SNoYxC4
Content-Disposition: form-data; name="photo"; filename="IMG_1281.JPG"
Content-Type: image/jpeg
控制器
@RequestMapping(value = "/t")
public ResponseEntity<ResponseMessage> t(@CookieValue(value = "SID", required = true) String sessionId,
@RequestPart("model") CategoryModel model,
@RequestPart("photo") MultipartFile file)
{
return new ResponseEntity<ResponseMessage>(new ResponseMessage(200, "success"), HttpStatus.OK);
}
模型
package bla.bla.bla;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.codehaus.jackson.annotate.JsonBackReference;
import org.codehaus.jackson.annotate.JsonIgnore;
public class CategoryModel {
public CategoryModel(String id, String name, String description, CategoryModel parent) {
super();
this.name = name;
this.description = description;
this.id = id;
this.parent = parent;
}
public CategoryModel(String id, String name, String description, CategoryModel parent, List<CategoryModel> childrens) {
super();
this.name = name;
this.description = description;
this.id = id;
this.parent = parent;
this.childrens = childrens;
}
public CategoryModel()
{
}
public String id;
public String name;
public String description;
public String imageUrl;
public CategoryModel parent;
public List<CategoryModel> childrens = new ArrayList<CategoryModel>();
}
我添加了控制器和实体请检查并让我知道我哪里出错?
谢谢你, 詹姆斯
答案 0 :(得分:5)
我也有类似的问题,幸运的是,this回答帮助我弄清楚出了什么问题。正如那里提到的,问题不在你的Java部分。您必须更改在客户端构建CategoryModel的Javascript逻辑。根据该答案,您的逻辑应该看起来像下面显示的代码:
var file = ... // your file
var model = {
id: 'TestId'
name: 'TestName',
description: 'TestDesciption',
.... // other fields are ommited
};
var fd = new FormData();
fd.append('photo', file);
fd.append('model', new Blob([JSON.stringify(model)], { type: "application/json" }));
使用此代码,您的例外应该得到修复。
答案 1 :(得分:0)
http://www.mkyong.com/spring-mvc/spring-mvc-file-upload-example/
文件上传依赖关系 - &gt;型号 - &gt;文件上传控制器 - &gt;文件上传验证 - &gt;查看页面 - &gt;弹簧配置 - &gt;演示
HTML
<form:form method="POST" commandName="fileUploadForm"
enctype="multipart/form-data">
<form:errors path="*" cssClass="errorblock" element="div" />
Please select a file to upload : <input type="file" name="file" />
<input type="submit" value="upload" />
<span><form:errors path="file" cssClass="error" />
</span>
</form:form>
的pom.xml
<!-- Apache Commons Upload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<!-- Apache Commons Upload -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
控制器
public class FileUploadController extends SimpleFormController{
public FileUploadController(){
setCommandClass(FileUpload.class);
setCommandName("fileUploadForm");
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
FileUpload file = (FileUpload)command;
MultipartFile multipartFile = file.getFile();
String fileName="";
if(multipartFile!=null){
fileName = multipartFile.getOriginalFilename();
//do whatever you want
}
return new ModelAndView("FileUploadSuccess","fileName",fileName);
}
模型
public class FileUpload{
MultipartFile file;
//getter and setter methods
}
...
input type =“file” name =“file” == private MultipartFile file ;
控制器 - &gt;模型 - &gt; getFile ^^ YES !!!