目录

请求参数的绑定

请求参数的绑定

支持的数据类型

基本类型参数:包括基本类型和 String 类型

POJO 类型参数:包括实体类,以及关联的实体类

数组和集合类型参数 :包括 List 结构和 Map 结构的集合(包括数组)

使用要求

SpringMVC 绑定请求参数是自动实现的,但是要想使用,必须遵循使用要求。

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

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

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>员工</title>
    </head>
    <body>
    <a href="employees">查询所有员工</a>
    <form action="param/saveAccount" method="post">
        姓名:<input type="text" name="username"> <br>
        课程名称:<input type="text" name="course.name"> <br>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>
    
  • 如果是集合类型 ,有两种方式:

  • 第一种:

    • 要求集合类型的请求参数必须在 POJO 中。在表单中请求参数名称要和 POJO 中集合属性名称相同。

    • 给 List 集合中的元素赋值,使用下标。

    • 给 Map 集合中的元素赋值,使用键值对。

      1
      2
      3
      4
      5
      6
      7
      
      <form action="param/saveAccount" method="post">
          姓名:<input type="text" name="username"> <br>
          课程名称:<input type="text" name="course.name"> <br>
          List:<input type="text" name="list[0]"> <br>
          Map: <input type="text" name="map['one']">
          <input type="submit" value="提交">
      </form>
      
  • 第二种:

    • 接收的请求参数是 json 格式数据。需要借助一个注解实现。

中文乱码过滤器

配置中文乱码过滤器

在web.xml加入以下代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<!--配置中文乱码过滤器-->
    <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>

自定义类型转换器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<!-- 配置类型转换器工厂 -->
<bean id="converterService"
      class="org.springframework.context.support.ConversionServiceFactoryBean">
    <!-- 给工厂注入一个新的类型转换器 -->
    <property name="converters">
        <array>
            <!-- 配置自定义类型转换器 -->
            <bean class="com.itheima.web.converter.StringToDateConverter"></bean>
        </array>
    </property>
</bean>

第三步:在 annotation-driven 标签中引用配置的类型转换服务
<!-- 引用自定义类型转换器 -->
<mvc:annotation-driven
        conversion-service="converterService"></mvc:annotation-driven>

获取Servlet原生的API

SpringMVC 还支持使用原始 ServletAPI 对象作为控制器方法的参数。支持原始 ServletAPI 对象有:

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • java.security.Principal
  • Locale
  • InputStream
  • OutputStream
  • Reader
  • Writer

我们可以把上述对象,直接写在控制的方法参数中使用。

1
2
3
4
5
6
7
8
9
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request,
                             HttpServletResponse response,
                             HttpSession session) {
    System.out.println(request);
    System.out.println(response);
    System.out.println(session);
    return "success";
}