2013-02-25 81 views
6

我不斷收到以下錯誤Spring MVC的多

org.springframework.web.multipart.support.MissingServletRequestPartException:請求部分 '模式' 未找到。

投遞多部分請求Spring MVC的控制器。

這是請求:

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>(); 
} 

我已經加入控制器和實體請檢查並讓我知道我哪裏錯了?

謝謝 詹姆斯

+1

你能否闡明你如何設置你的multipartResolver bean? http://static.springsource.org/spring/docs/3.1.0.RC1/spring-framework-reference/html/mvc.html#mvc-multipart – purgatory101 2013-02-25 19:57:13

+1

這是配置: 2013-02-26 06:16:06

+1

你的jsp表單看起來像什麼? – kabal 2013-05-16 21:37:11

回答

5

我也有過類似的問題,幸運的是,this答案幫助我弄清楚什麼是錯的。正如在那裏提到的,這個問題不在你的Java部分。你必須改變你的Javascript邏輯,在客戶端建立你的CategoryModel。根據這個問題的答案你的邏輯應該是這樣的代碼如下所示:

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" })); 

而與此代碼的異常應該是固定的。

0

http://www.mkyong.com/spring-mvc/spring-mvc-file-upload-example/

文件上傳相關 - >模式 - >文件上傳控制器 - >文件上傳驗證 - >查看頁面 - >彈簧配置 - >演示

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 
} 

...

輸入類型= 「文件」 名= 「文件」 ==私人MultipartFile 文件;

控制器 - >模型 - >的GetFile ^^ YES!