SpringMVC接收不到前端传递的参数原因分析

前言

?在学习SpringMvc的时候遇到了一个问题,后台一直接收不到前台传递过来的参数,耽误了好长时间终于找到了原因,写篇博客记录下这个坑,嘤嘤嘤 --__--

代码清单

?使用SpringMvc接受前台传递的参数非常简单,只要参数名和前台表单中的名称一致即可,我弄得是一个文件上传的例子,所以看下我的前台页面

<body>
    <!-- enctype="multipart/form-data"在文件上传时加入,编码类型,其值默认是application/x-www-form-urlencoded -->
    <form action="testFileUpload" method="post" enctype="multipart/form-data">
        File: <input type="file" name="file" />
        Desc: <input type="text" name="desc" />
        <input type="submit" value="Submit" />
    </form>
    <br><br>
    <a href="emps">List All Employees</a>
</body>

?下面是SpringMvc的控制器

@Controller
public class springMVCTest {

    @RequestMapping("/testFileUpload")
    public String testFileUpload(@RequestParam("desc") String desc,
            @RequestParam("file") MultipartFile file) throws IOException {
        System.out.println("desc: " + desc);
        System.out.println("originalFilename: " + file.getOriginalFilename());
        System.out.println("inputStream: " + file.getInputStream());

        return "success";
    }
}

?接着是web.xml文件

<!-- 配置DispatcherServlet -->
    <!-- SpringMvc会根据servlet-name配置,找到/WEB-INF/dispatcher-servlet.xml作为配置文件载入Web工程中 -->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

? 然后是SpringMvc的配置文件

<!-- 配置自动扫描的包 -->
    <context:component-scan base-package="com.zgz.springmvc.crud"></context:component-scan>
    <context:component-scan base-package="com.zgz.springmvc.test"></context:component-scan>

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

?之后坑就来了,由于是文件上传,所以需要在Spring MVC的配置文件中添加multipartResolver,添加就添加呗,于是我就加上了下面这一段代码:

<!-- 配置 MultipartResolver -->
    <bean id="commonsMultipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
        <property name="maxUploadSize" value="1024000"></property>
    </bean>

?然后坑就出现,费尽周折发现是id写错了,id="multipartResolver",修改代码为:

 <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
        <property name="maxUploadSize" value="1024000"></property>
    </bean>

写在最后

附上我喜欢的一句话
?我想也许有一天,你会变成像我这样的老人,并向一位年轻人娓娓道来:你是如何将生活带给你柠檬般的酸楚,酿成犹如柠檬汽水般的甘甜

原文地址:http://blog.51cto.com/13416247/2141431

时间: 2024-11-09 19:46:07

SpringMVC接收不到前端传递的参数原因分析的相关文章

记录一个小问题,如果前端传递的参数是加密过的,需要在后台解密

如果前端传递的参数是加密过的,需要在后台解密,有中文等特殊符号需要用到加密: 前端代码: $.ajax({ type: "POST", url: "/init/SaveToDatabase", dataType: "json", async: false, data: decodeURIComponent(JSON.stringify(array)), success: function (result) { var statusCode = r

SpringMVC的学习____4.前端,控制器参数名不一致以及对象传递的解决方法

代码如下: 1.SpringMVC的web.xml文件:(DispatcherServlet配置) <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLo

前端AJAX传递数组给Springmvc接收处理

前端传递数组后端(Spring)来接收并处理: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>测试页面</title> <script type="text/javascript" src="http://www.ostools.net/js/jquery/jquery-1.7.2.js">

SpringMVC接收多参数的处理方法

问题:依赖SpringMVC自带的机制解析多对象参数往往出现解析不了的问题,使用较为复杂. 解决思路:前端 JS 先把传递到后台的对象转换为 JSON 字符串,后台直接使用字符串类型接收,再使用 stringify 方法将 JSON 字符串解析成对应的Java对象. 具体步骤 前端定义一个空对象 var obj = new Object(); 将需要传递的参数存入定义的空对象中,传递的参数分为以下几种情况 前端有多个简单同类型的参数:将这些参数整合到 Array 中,通过 JSON.string

SpringMVC控制器接收不了PUT提交的参数的解决方案

摘要: SpringMVC控制器接收不了PUT提交的参数的解决方案 这次改造了下框架,把控制器的API全部REST化,不做不知道,SpringMVC的REST有各种坑让你去跳,顺利绕过它们花了我不少时间,这次来提下SpringMVC的PUT提交参数为null的情况. 照常先贴出我的控制器代码,没什么特别的,就是打印出接受到的前台参数值: @RequestMapping(value = "/{id}", method = RequestMethod.PUT) @ResponseBody

datatable前端传递参数与返回值格式说明

内容相关: jQuery插件 dataTable Ajax分页功能实现 前端传递参数: columns[0][data] 0 columns[0][name] columns[0][orderable] true columns[0][search][regex] false columns[0][search][value] columns[0][searchable] true columns[1][data] 1 columns[1][name] columns[1][orderable]

SpringMVC中使用bean来接收form表单提交的参数时的注意点

这是前辈们对于SpringMVC接收表单数据记录下来的总结经验: SpringMVC接收页面表单参数 springmvc请求参数获取的几种方法 下面是我自己在使用时发现的,前辈们没有记录的细节和注意点: 使用bean来接收form表单提交的参数时,pojo中必须含有默认的(即空的)构造函数,同时,需要设置到bean中的变量必须有setter方法. 注:以下代码均为示例代码,非本人实际运行代码,请自行补充. 例如:我有一个bean类是User,具有变量username和password.同时,表单

【前端】vue项目 url中传递数组参数

[问题情景] 我在项目中使用了一个iframe,引入另一个项目,想通过动态修改iframe的src使iframe中的页面动态展示,在这个过程中,我碰到了一个问题,就是我往url传递数组参数的时候,接受到的是[object object],这使我读不出我传递的参数.但是我百度谷歌了一把,都没有找到很好的解决方案.下面附上我的解决方案. [解决方案] 传递参数的页面 let testArray = [{a:1},{b:2},{c:3}]; let testStr = encodeURICompone

SpringMVC接收复杂集合参数,集合对象

Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是application/json,因此发送POST请求时需要设置请求报文头信息,否则Spring MVC在解析集合请求参数时不会自动的转换成JSON数据再解析成相应的集合.以下列举接收List<Integer>.List<User>.List<Map<String,Object>&