• Spring SpringMVC文件上传错误(一)


    场景:

    测试一个最基础的关于SpringMVC文件上传的功能。


    必须配置的:

    1. form的enctype=”multipart/form-data” 这个是上传文件必须的 配置文件中
    <bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”/>

    错误信息:

    Field error in object 'xxx' on field 'xxx': rejected value [org.springframework.web.multipart.commons.CommonsMultipartFile@d872e9]; codes [typeMismatch.xxx.xxx,typeMismatch.xxx,typeMismatch.java.lang.String,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [xxx.xxx,xxx]; arguments []; default message [xxx]]; default message [Failed to convert property value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'java.lang.String' for property 'xxx'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.springframework.web.multipart.commons.CommonsMultipartFile] to required type [java.lang.String] for property 'xxx': no matching editors or conversion strategy found] 

    HTML代码:

    <form action="/upload" enctype="multipart/form-data">  
        <input type="file" name="apkurl" id="apkurl" />  
    </form>

    实体类:

    package com.xxx.xxx.controller;
    
    import java.util.Map;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    
    import com.xxx.xxx.bean.ApkInfo;
    import com.xxx.xxx.core.pagination.mybatis.pager.Page;
    import com.xxx.xxx.exception.ServiceException;
    import com.xxx.xxx.service.ApkInfoManager;
    
    /**
     * 包名:     com.xxx.xxx.controller   
     * 类名:     ApkInfoController
     * 描述:     业务调用对象
     * 作者:     wengang.liu
     * 时间:     2016-04-29 15:18:48
     */
    @Controller
    public class ApkInfoController extends BaseController{
        /**
         * 系统日志
         */
        private static final Logger LOGGER = LoggerFactory.getLogger(ApkInfoController.class);
    
        /**
         * service
         */
        @Autowired
        private ApkInfoManager apkInfoManager;
    
        /**
         * 新增
         */
        @RequestMapping(value = "/upload", method = RequestMethod.POST)
        @ResponseBody
        public Map<String, Object> add(@RequestParam(value="apkurl", required=false) MultipartFile apkFile, ApkInfo apkInfo){
            ...
            return super.success("新增成功");
        }

    这里贴实体类的意义在于,Spring注入的是接口,关联的是实现类。这里注入了实现类,所以报异常了

    简单的说:就是Spring把这个与实体类属性同名的参数注入了这个实体,而这个实体属性的类型是String,自然与CommonsMultipartFile类型无法匹配。

    在此设想,假如实体的属性类型是CommonsMultipartFile是不是可以注入成功呢?


    所以这个问题的一种解决方案为:
    修改表单中,文件域的name命名,注意此处的命名必须和value相同。


    学生浅薄,望众师指点
    
    wengang.liu
    学生浅薄 望众师指点
  • 相关阅读:
    stat(),lstat(),fstat() 获取文件/目录的相关信息
    lseek() 定位一个已经打开的文件
    Android 自定义View修炼-仿360手机卫士波浪球进度的实现
    Android 自定义View修炼-仿QQ5.0 的侧滑菜单效果的实现
    小蔡计算器 V4.0新版全新发布上线啦~欢迎大家下载使用哈~
    小蔡电脑助手3.0新版全新发布上线啦~欢迎大家下载使用哦~
    考试必备神器-真题园手机客户端Android版1.1正式上线啦,欢迎大家下载使用!
    Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)
    Android开发之自定义圆角矩形图片ImageView的实现
    Android开发之自定义圆形的ImageView的实现
  • 原文地址:https://www.cnblogs.com/Nihility/p/14695676.html
Copyright © 2020-2023  润新知