Spring MVC konnte den Eigenschaftswert im Dateiuploadformular nicht konvertieren

Spring MVC konnte den Eigenschaftswert im Datei-Upload-Formular nicht konvertieren

Problem

Wenn Sie in der Spring MVC-Anwendung auf die Schaltfläche zum Hochladen von Dateien klicken, wird der folgende Fehler bei der Konvertierung des Eigenschaftstyps angezeigt?

_
Fehler beim Konvertieren des Eigenschaftswerts vom Typ [org.springframework.web.multipart.commons.CommonsMultipartFile] in den erforderlichen Typ [byte []] für die Eigenschaftendatei; verschachtelte Ausnahme ist java.lang.IllegalArgumentException: Wert vom Typ [org.springframework.web.multipart.commons.CommonsMultipartFile] kann nicht in den erforderlichen Typ [Byte] für die Eigenschaftendatei [0] konvertiert werden: PropertyEditor [org.springframework.beans.propertyeditors. CustomNumberEditor] hat einen unangemessenen Wert zurückgegeben_

Hier ist der SimpleFormController ...

public class FileUploadController extends SimpleFormController{

    public FileUploadController(){
        setCommandClass(FileUpload.class);
        setCommandName("fileUploadForm");
    }
    //...

public class FileUpload{

    byte[] file;
    //...
}

Lösung

Dies ist ein häufiges Problem bei der Verarbeitung der hochgeladenen Datei in Spring MVC, da die hochgeladene Datei nicht automatisch in Byte-Arrays konvertiert werden kann. Damit dies funktioniert, müssen Sie einen benutzerdefinierten Editor (ByteArrayMultipartFileEditor) in derinitBinder()-Methode von SimpleFormController registrieren, um Spring bei der Konvertierung der hochgeladenen Datei in ein Byte-Array zu unterstützen.

    public class FileUploadController extends SimpleFormController{

    public FileUploadController(){
        setCommandClass(FileUpload.class);
        setCommandName("fileUploadForm");
    }

       @Override
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder)
        throws ServletException {

        // Convert multipart object to byte[]
        binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());

    }
    //...