PPT 第7章 Spring MVC数据绑定和响应

  • 了解Spring MVC中数据绑定的概念
  • 熟悉简单数据类型的绑定
  • 熟悉复杂数据类型的绑定
  • 掌握Spring MVC数据绑定的使用
  • 掌握Spring MVC的数据响应
  • 掌握不同类型返回值的页面跳转

通过上一章的学习,已经知道客户端请求和服务器端处理器之间的映射方式。
客户端和服务器端通过映射可以完成两者的交互,其中客户端发起请求,服务器端将请求参数的值赋给处理器的形参完成数据的绑定,最终将想要返回给客户端的数据发给客户端进行响应。
Spring MVC支持多种数据类型的数据绑定,响应方式也比较灵活, 本章将对Spring MVC框架中的数据绑定和响应 进行详细讲解。
01
02
03

7.1 数据绑定

数据绑定的概念

在程序运行时,Spring MVC接收到客户端的请求后,
会根据客户端请求的参数和请求头等数据信息,将参数以特定的方式转换并绑定到处理器的形参中。
Spring MVC中将请求消息数据与处理器的形参建立连接的过程就是Spring MVC的数据绑定。

7.2 简单数据绑定

7.2.1 默认类型数据绑定

当使用Spring MVC默认支持的数据类型作为处理器的形参类型时,Spring MVC的
参数处理适配器会默认识别这些类型并进行赋值。
Spring MVC常见的默认类型如下所示。
  • HttpServletRequest:通过request对象获取请求信息。
  • HttpServletResponse:通过response处理响应信息。
  • HttpSession:通过session对象得到session中存放的对象。
  • Model/ModelMap:Model是一个接口,ModelMap是一个类,Model的实现类对象和ModelMap对象都可以设置model数据,model数据会填充到request域。

控制器类的包 >

        控制器类 @Controller >

                方法 getUserId( ):用于获取客户端请求中userid参数的值。

     

例1

 

 7.2.2 简单数据类型绑定

简单数据类型,就是指Java中 基本类型(如int、double、String等)的数据绑定
在Spring MVC中进行简单类型的数据绑定,只需客户端请求参数的名称和处理器 的形参名称一致即可请求参数会自动映射并匹配到处理器的形参完成数据绑定。
例2:实现 Integer 类型 和 String 类型 的数据绑定

 

 参数别名的设置

有时候客户端请求中参数名称和处理器的形参名称不一致,会导致处理器无法正确绑定并接收到客户端请求中的参数。
为此,Spring MVC提供了 @RequestParam注解 定义参数的别名 完成请求参数名称和处理器的形参名称不一致 时的数据绑定

@RequestParam注解

  • value属性,给getUserName()方法中的username形参定义了别名name。

此时,客户端请求中名称为name的参数,就会绑定到getUserName()方法中的 username形参上。

  • required属性,设定了请求的name参数不是必须的。

如果访问时没有携带name参数,会将

  • defaultValue属性,设定的值赋给形参username。

——当请求的映射方式是REST风格时,上述对简单类型数据绑定的方式就不适用了。

 

 

 

——使用别名—————————————————————————————————————

 

 

@PathVariable注解

可以将URL中占位符参数绑定到处理器的形参中。

  •  value:用于指定URL中占位符名称。
  •  required:是否必须提供占位符,默认值为true。

7.2.3 POJO绑定

使用场景

在实际应用中,客户端请求可能会传递多个不同类型的参数数据,如果还使用简单数据类型进行绑定,那么就需要手动编写多个不同类型的参数,这种操作显然比较 繁琐
为解决这个问题,可以使用POJO类型进行数据绑定。

POJO数据绑定的概念

将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用该POJO作为形参来完成数据绑定。
04
05
 例3:实现 POJO 绑定

         客户端请求的参数名称(本例中指form表单内各元素 name的属性值)必须与要绑定的POJO类中的属性名称保持一致。

 多学一招:解决请求参数中的中文乱码问题

 7.2.4 自定义类型转换器

        默认类型转换器并不能将提交的 参数转换为所有的类型。
        此时,就需要开发者自定义类型转换器,来 将参数转换为程序所需要的类型

Converter接口的使用

        Spring框架提供了org.springframework.core.convert.converter.Converter接口作为类型转换器,开发者可以通过实现Converter接口来自定义类型转换器。
public interface Converter<S, T> {
    T convert(S source);
}
        上述代码中,泛型参数中的S表示源类型,T表示目标类型,而convert( )方法将源类型转
换为目标类型返回,方法内的具体转换规则可由开发者自行定义。

例4:实现Date类型的数据绑定

        1、通过实现Converter接口来自定义类型转换器

        2、为了让Spring MVC知道并使用DateConverter转换器类,还需要在配置文件spring- mvc.xml置类型转换器

<!-- 配置类型转换器工厂 -->

<bean id="converterService" class=
"org.springframework.context.support.ConversionServiceFactoryBean">

    <!-- 给工厂注入一个新的类型转换器,配置自定义类型转换器 -->
    <property name="converters">
        <array>
            <bean class="com.wuz.convert.DateConverter"/>
        </array>
    </property>

</bean>

<mvc:annotation-driven conversion-service="converterService"/>

        3、方法:用于绑定客户端请求中的日期数据。

 

 ——成功,以下———————————————————————————————————

 

  ——成功——————————————————————————————————————

 

 总之,使用自定义类转换器,如下。。。。。

 



 输入形式:yyyy-mm-dd

 转化成Data

 日期类型的格式转换:@DateTimeFormat注解

/**
* 使用@DateTimeFormat注解绑定日期数据
*/
@RequestMapping("/getBirthday")
public void getBirthday(@DateTimeFormat(
pattern = "yyyy-MM-dd")Date birthday) {
System.out.println("birthday="+birthday);
}
<!-- 配置创建 spring 容器要扫描的包 -->
<context:component-scan base package="com.wzu.controller"/>
    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view
    .InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
    </bean>
<mvc:annotation-driven />
<body>
    <form action="${pageContext.request.contextPath}/getBirthday02" method="post">
        生&nbsp;&nbsp;&nbsp;日:<input type="text" name="birthday" /><br />
        <input type="submit" value="注册"/>
    </form>
</body>

 


 还有

....

页面跳转
数据回写
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值