SpringMVC请求参数的绑定

本文深入解析SpringMVC框架如何处理和绑定不同类型的表单请求参数,包括基本类型、POJO、集合类型及JSON数据的自动转换机制,探讨自定义类型转换器的实现,并提供配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都知道,表单请求参数都是基于 key=value的/
springMVC绑定请求参数的过程时通过把表单提交请求参数,
作为控制器中方法参数进行绑定的。
在这里插入图片描述

1.支持的数据类型:在这里插入图片描述
2.使用要求:

如果是基本类型或者 String类型:
要求我们的参数名称必须和控制器中方法的形参名称保持一致。(严格区分大小写)

如果是 POJO类型,或者它的关联对象:
要求表单中参数名称和 POJO 类的属性名称保持一致。并且控制器方法的参数类型是 POJO 类型。

如果是集合类型,有两种方式:
第一种:
要求集合类型的请求参数必须在 POJO 中。在表单中请求参数名称要和 POJO 中集合属性名称相同。
给 List 集合中的元素赋值,使用下标。
给 Map 集合中的元素赋值,使用键值对。
第二种:
接收的请求参数是 json 格式数据。需要借助一个注解实现。

注意: 它还可以实现一些数据类型自动转换。内置转换器全都在:org.springframework.core.convert.support 包下。
如遇特殊类型转换要求,需要我们自己编写自定义类型转换器。

3.基本类型和String类型做参数

在这里插入图片描述
注意:我们的参数名称必须和请求key值称保持一致。(严格区分大小写)

4.POJO 类型作为参数
业务模型

在这里插入图片描述

表单

在这里插入图片描述

controller

在这里插入图片描述

测试结果

在这里插入图片描述

配置WEB-INF下web.xml 解决中文乱码问题
    <!--配置解决中文乱码的过滤器-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

以上还存在一个小问题,生日必须严格以 / 分割,这样springMVC框架才会为我们自动类型转换,也可以自己DIY如下:当用户输入以 - 分割为例

//类型转换工具类
//Converter<String,Date> ,第二个为转出类型
public class StringToDateConverter implements Converter<String,Date> {

    public Date convert(String source){
        //判断
        if (source==null){
            throw new RuntimeException("请传入数据");
        }
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try{
            return df.parse(source);
        } catch (ParseException e) {
            throw new RuntimeException("数据类型转换出现错误");
        }
    }
}
配置类型转换器给springmvc框架自动调用,id必须是 conversionService
    <!--配置自定义类型转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="cn.itcast.utils.StringToDateConverter"/>
            </set>
        </property>
    </bean>
5.POJO 类中包含集合类型参数
业务模型domian

在这里插入图片描述
在这里插入图片描述

jsp表单写法
    <form action="/user/testUserAndAccount" method="post">
        姓名:<input type="text" name="username" /><br/>
        密码:<input type="text" name="password" /><br/>

        用户姓名:<input type="text" name="accounts[0].username" /><br/>
        用户余额:<input type="text" name="accounts[0].money" /><br/>

        用户姓名:<input type="text" name="accountMap['one'].username" /><br/>
        用户余额:<input type="text" name="accountMap['one'].money" /><br/>
        <input type="submit" value="提交" />
    </form>
controller
    @RequestMapping ("/testUserAndAccount")
    public String testUserAndAccount(User user){
        System.out.println(user);
        return "success";
    }

测试结果:
在这里插入图片描述

6.使用 ServletAPI 对象作为方法参数

在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值