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