2013-02-25 72 views
6

मैं निम्नलिखित त्रुटि प्राप्त हो रहीवसंत MVC बहुखण्डीय

org.springframework.web.multipart.support.MissingServletRequestPartException: अनुरोध हिस्सा 'मॉडल' नहीं मिला।

वसंत एमवीसी नियंत्रक के लिए मल्टीपार्ट अनुरोध पोस्ट करते समय।

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

क्या आप यह स्पष्ट कर सकते हैं कि आपने अपना मल्टीपार्ट रीसोल्वर बीन कैसे सेट किया है? http://static.springsource.org/spring/docs/3.1.0.RC1/spring-framework-reference/html/mvc.html#mvc-multipart – purgatory101

+1

यह कॉन्फ़िगरेशन है: <बीन आईडी = "मल्टीपार्ट रीसोल्वर" वर्ग = "org.springframework.web.multipart.commons।CommonsMultipartResolver "/> –

+1

आपका जेएसपी फॉर्म कैसा दिखता है? – kabal

उत्तर

5

मैं भी एक ऐसी ही समस्या थी और सौभाग्य से, this जवाब मुझे मदद की यह पता लगाने की क्या गलत था। जैसा कि उल्लेख किया गया था, समस्या आपके जावा भाग में नहीं है। आपको अपना जावास्क्रिप्ट तर्क बदलना होगा जो क्लाइंट साइड पर आपकी श्रेणी मॉडल बनाता है। कि इसका जवाब आपके तर्क कोड के रूप में की तरह दिखना चाहिए जो नीचे दिखाया गया है के अनुसार:

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/

फाइल अपलोड निर्भरता -> मॉडल -> फाइल अपलोड नियंत्रक -> फाइल अपलोड मान्यकरण -> देखें पृष्ठ -> स्प्रिंग विन्यास -> डेमो

एचटीएमएल

<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> 

पोम। 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 ^^ हाँ !!!