Spring MVC n’a pas pu convertir la valeur de la propriété sous la forme d’envoi de fichier

Spring MVC n'a pas réussi à convertir la valeur de la propriété dans le formulaire de téléchargement de fichier

Problème

Dans l'application Spring MVC, en cliquant sur le bouton de téléchargement de fichier, il rencontre l'erreur de conversion de type de propriété suivante?

_
Échec de la conversion de la valeur de propriété de type [org.springframework.web.multipart.commons.CommonsMultipartFile] en type requis [byte []] pour le fichier de propriétés; l'exception imbriquée est java.lang.IllegalArgumentException: Impossible de convertir la valeur de type [org.springframework.web.multipart.commons.CommonsMultipartFile] en type requis [octet] pour le fichier de propriétés [0]: PropertyEditor [org.springframework.beans.propertyeditors. CustomNumberEditor] a renvoyé une valeur inappropriée_

Voici le SimpleFormController…

public class FileUploadController extends SimpleFormController{

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

public class FileUpload{

    byte[] file;
    //...
}

Solution

Il s'agit d'un problème courant dans la gestion du fichier téléchargé dans Spring MVC, qui ne peut pas convertir automatiquement le fichier téléchargé en tableaux d'octets. Pour que cela fonctionne, vous devez enregistrer un éditeur personnalisé (ByteArrayMultipartFileEditor) dans la méthodeinitBinder() de SimpleFormController pour guider Spring pour convertir le fichier téléchargé en tableau d'octets.

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

    }
    //...