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