SpringMVC_4.请求数据

请求数据

说明:

        SpringMVC提供了从请求对象中获取请求数据的 两种 方式 :  自动获取 和 手动获取 .
注意 :

  1.         若注入的数据乱码或类型不匹配,会导致注入失败.[性别乱码,年龄非数字]
  2.         被注入数据的对象,无需装入Spring容器[无需@Component标注].

                 备注:反射原理实现,所以无需把注入数据的对象装入Spring容器

自动获取

        1.当请求参数名与处理方法参数名相同时,SpringMVC将请求中参数的值赋给方法的同名参数.

        2.SpringMVC支持级联属性[复杂参数],将请求参数名与方法参数表示的对象的属性名匹配,并进行赋值.

 补充:如果一级复合对象中还有复合对象,使用二级复合对象,要用一级符合对象名打点调用二级复合对象名,例如图中:

dept.deptName

        3.若请求中不含与"处理方法参数"同名的参数时,SpringMVC将null作为处理方法的参数的值 [ null值无法转为基本数据类型 ] .

注意(自动获取和手动获取都要注意):

因为null无法转为基本数据类型,int,char...都属于基本数据类型(点击详情

如果方法参数中有基本数据类型参数,对应(基本数据类型)参数传过去一个null值会报错

所以在方法参数中用封装类型代替基本数据类型,如int - Integer , char - Character【封装类型可以赋 null 或原本类型值】

POST 请求编码处理,配置编码过滤器 :

说明:

        1. 因为为了保证数据安全,一般都是POST方式提交,所以需要配置编码过滤器,把请求来的数据转换为utf-8格式

        2. 编码过滤器固定格式内容

        3. 编码过滤器配置在web.xml中,写在<web-app>标签下...

代码:

    <!-- 配置编码过滤器,防止请求数据类型转换失败: 只对POST请求有效 -->
    <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.地址栏中最大1024 字节的请求内容        (也就是512中文)

        2.编码过滤器原本只对POST请求有转码效果,但是,在IDEA中因为IDEA的特性,对POST和GET请求都有效

手动获取 :

说明 :

        Spring提供了四种注解方式,编写在方法参数类型前,将指定数据名的值赋给标注的方法参数.

  1. @RequestParam(从请求参数中获得)
  2. @RequestHeader(从请求头中获得)
  3. @CookieValue(从客户端Cookie中获得)
  4. @PathVariable(从请求路径中获得)
  5. Servlet API(传统Servlet类方法中的写法)

备注 :

        @RequestParam        @RequestHeader        @CookieValue        @PathVariable

        用法,格式和注释的参数完全相同,区别在于获得数据的来源不同

@RequestParam :

格式:
    

public 返回值 方法名(@RequestParam((参数列..) 参数类型 参名,..){
    //方法体
}


说明:

  1.     @RequestParam获得请求中指定参数的值,赋给标注的方法参数.
  2.     @RequestParam参数:
属性名作用
value将请求信息中指定参数名的值,赋给标注的参数
defaultValue当请求信息中没有提供指定参数或参数为空时,将默认值赋给标注的参数
required请求中是否必须有指定的参数.默认为true且未设置默认值,当请求中无指定参数时将报错


Servlet API类型参数:
        若处理方法含有Servlet API类型参数,SpringMVC会自动向处理方法注入Servlet API参数值.

        SpringMVC支持以下类型参数的注入.

  1. HttpServletRequest
  2. HttpServletResponse
  3. HttpSession
  4. java.security.Principal
  5. Locale
  6. InputStream
  7. OutputStream
  8. Reader
  9. Writer

格式:

@RequestMapping(value="/映射路径")
权限 返回值 方法名(HttpServletRequest request,..){
    //方法体
}


    说明:

    当执行处理方法时,SpringMVC自动将Servlet相关对象传递给方法参数

    此手动获取方法和传统的Servlet文件中获取提交数据写法一致,更方便的是还会被编码过滤器过滤,省去了在Servlet文件中写时还需写这两行代码来进行转码:

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");

    Writer对象获取 [ response.getWriter ( ) ]

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾欲乘风归去,又恐琼楼玉宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值