@RequestPart mit gemischten multipart-request, Spring MVC 3.2

Ich bin der Entwicklung eines RESTful service auf Basis von Spring 3.2. Ich bin mit einem problem konfrontiert, mit einem controller Verarbeitung von gemischten multipart-HTTP-Anforderung, mit einem Zweiten Teil mit XMLor JSON-formatierte Daten, und ein zweites Teil mit einer Image-Datei .

Ich bin mit @RequestPart annotation für den Erhalt der Anfrage

@RequestMapping(value = "/User/Image", method = RequestMethod.POST,  consumes = {"multipart/mixed"},produces="applcation/json")

public
ResponseEntity<List<Map<String, String>>> createUser(
        @RequestPart("file") MultipartFile file, @RequestPart(required=false) User user) {

    System.out.println("file" + file);

    System.out.println("user " + user);

    System.out.println("received file with original filename: "
            + file.getOriginalFilename());

    //List<MultipartFile> files = uploadForm.getFiles();
    List<Map<String, String>> response = new ArrayList<Map<String, String>>();
    Map<String, String> responseMap = new HashMap<String, String>();

    List<String> fileNames = new ArrayList<String>();

    if (null != file) {
        //for (MultipartFile multipartFile : files) {

        String fileName = file.getOriginalFilename();
        fileNames.add(fileName);

        try {
            file.transferTo(new File("C:/" + file.getOriginalFilename()));
        } catch (IllegalStateException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    responseMap.put("displayText", file.getOriginalFilename());
    responseMap.put("fileSize", "" + file.getSize());
    response.add(responseMap);

    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.add("Accept", "application/json");
    return new ResponseEntity<List<Map<String, String>>>(response,
            httpHeaders, HttpStatus.OK);

}

User.java wird wie dieser-

@XmlRootElement(name = "User")


public class User implements Serializable { 
    private static final long serialVersionUID = 1L;

    private int userId;
    private String name;
    private String email;

    private String company;
    private String gender;

    //getter setter of the data members
}

Meinem Verständnis, mit dem @RequestPart Anmerkung würde ich erwarten, dass die XML-multipart-Abschnitt ausgewertet werden, je nach Content-Type und schließlich un-gemarshallt in meiner User-Klasse (ich bin mit Jaxb2, die marshaller/unmarhaller richtig konfiguriert ist und in den Anwendungskontext und die Prozedur ist in Ordnung, für alle anderen controller-Methoden, wenn ich übergeben, die XML-Daten als Körper und verwenden Sie das @ - RequestBody annotation).

Aber was tatsächlich passiert, ist, dass, obwohl die Datei korrekt gefunden und analysiert, wie MultipartFile, die "Benutzer" - Teil nie gesehen, und die Anforderung wird immer scheitern, nicht in übereinstimmung mit der controller-Methode Signatur.

Ich reproduziert das problem mit einigen clients geben, und ich bin zuversichtlich, dass das format multipart Anfrage ist ok.

Mir bitte helfen, dieses Problem zu lösen, Vielleicht ein workaround sein, um zu empfangen mixed/multipart-request.

Dank und Grüße,

Raghvendra

  • Hast du schon versucht mit consumes = {"multipart/form-data"}?
InformationsquelleAutor Raghvendra | 2013-04-26
Schreibe einen Kommentar