2013-02-25 13 views
6

Continuo a ricevere il seguente erroreSpring MVC multipart

org.springframework.web.multipart.support.MissingServletRequestPartException: Richiesta di parte 'modello' non trovato.

Quando si invia una richiesta multipart al controller mvc molla.

Questa è la domanda:

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 

controller

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

Modello

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

Ho aggiunto controller e entità prega di controllare e fammi sapere dove sto andando male?

Grazie, James

+1

Potrebbe chiarire come è stato impostato il bean multipartResolver? http://static.springsource.org/spring/docs/3.1.0.RC1/spring-framework-reference/html/mvc.html#mvc-multipart – purgatory101

+1

questa è la configurazione:

+1

come è la tua forma jsp? – kabal

risposta

5

Ho anche avuto un problema simile e per fortuna, this risposta mi ha aiutato a capire che cosa era sbagliato. Come menzionato qui, il problema non è nella tua parte Java. Devi modificare la tua logica Javascript che costruisce il tuo CategoryModel sul lato client. In base a tale risposta la logica dovrebbe essere simile come codice che riportiamo di seguito:

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

E con questo codice tua eccezione dovrebbe essere risolto.

0

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

Upload di file di dipendenza -> Modello -> File Upload Controller -> File Upload di convalida -> Visualizza pagina -> Configurazione Primavera -> Demo

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> 

controller

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

tipo di modello

public class FileUpload{ 

MultipartFile file; 
//getter and setter methods 
} 

...

input = "file" name = "file" == privato MultipartFile lima;

controller -> modello -> getFile ^^ SÌ !!!