请求数据

说明:

        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 ( ) ]

SpringMVC_4.请求数据相关推荐

  1. 前端Vue学习之路(四)axios请求数据

    axios 1.增加新知识 2.旧方案 3.新方案(一) 4.为什么要用拦截器 (新方案二) 1.增加新知识 假如每个组件都引用axios,后期如果axios库不再维护了,那每个组件都要改动 所以封装 ...

  2. python的flask框架显示柱状图_使用Python的Flask框架,结合Highchart,动态渲染图表(Ajax 请求数据接口)...

    参考链接:https://www.highcharts.com.cn/docs/ajax 参考链接中的示例代码是使用php写的,这里改用python写. 需要注意的地方: 1.接口返回的数据格式,这个 ...

  3. html弹窗赋值给查询框,bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)...

    /查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...

  4. html 中ajax 请求没反应,ajax请求数据成功,页面的数据没有加载出来

    w3c的ajax的例子,点击按钮,(ajax请求读取一个本地ajax.txt文件)页面展示其内容, 在chrome中打开页面,点击按钮请求成功,但是页面没有显示ajax.txt的内容,这是为什么呢? ...

  5. node后台fetch请求数据-Hostname/IP doesn‘t match certificate‘s altnames解决方法

    node后台fetch请求数据-Hostname/IP doesn't match certificate's altnames解决方法 参考文章: (1)node后台fetch请求数据-Hostna ...

  6. 向服务器请求数据的五种技术

    2019独角兽企业重金招聘Python工程师标准>>> Ajax,在它最基本的层面,是一种与服务器通讯而不重载当前页面的方法,数据可从服务器获得或发送给服务器.有多种不同的方法构造这 ...

  7. AJAX跨域请求数据原理与案例

    1.如何通过AJAX跨域请求数据 AJAX通过jsonp来实现跨域请求数据,通过设置dataType(jquery)为jsonp即可. 2.AJAX如何通过jsonp实现跨域(来源于其他网站资料) J ...

  8. Retrofit2.0 请求数据 一直出返回网络错误,错误代码 414

    今天 使用rettorfit 去请求数据一直不成功,请求逻辑上以及请求参数上都没有问题,后台也验证过是通的(我用xutils3请求也是成功的,后来意识到xutils3是将参数放在请求体里面),但是就是 ...

  9. NodeJS http服务端获取POST请求数据

    http服务 我们知道,使用nodejs标准库的http模块创建一个http服务很简单,如下: const http = require('http');const hostname = '127.0 ...

最新文章

  1. 【跃迁之路】【554天】程序员高效学习方法论探索系列(实验阶段311-2018.08.13)...
  2. samba mv命令出错
  3. 除了沉迷酒色之外,你还做过什么?
  4. latex的基本使用
  5. 【总结】大规模数据测试,数据准备时需要注意的问题(【保护已有数据】【大规模数据影响普通测试】【不要着急删除数据】)
  6. Android ViewDragHelper的简单分析(一)
  7. libgsm.a relocation R_X86_64_PC32 can not be used when making a shared object; recompile with -fPIC
  8. 比特率和波特率的公式解析
  9. python爬虫爬取圆通快递信息
  10. 单行文本溢出显示省略号
  11. 2021年美容师(中级)考试题及美容师(中级)模拟考试
  12. linux resolv.conf 重启,Ubuntu关于修改resolv.conf重启失效的问题
  13. 国外android内存清理工具,给大家推荐一个安卓清理神器哈,确实好用
  14. 苹果CMSv10最全系统标签,模板标签仿站必备
  15. 字符集和Java char与UTF-16
  16. CSP第十二次认证 行车路线 拆点
  17. 飞跃计划 | 袋鼠云与睿呈时代达成战略合作,携手助推传统行业数字化转型
  18. Bootstrap 模态框(Modal)的属性及方法
  19. ffmpeg-avi转mp4命令
  20. 希沃集控系统流媒体服务器未开启,希沃集控 | 轻松掌控区域信息化情况

热门文章

  1. react table里跳转页面_如何在react中实现一个table切换?
  2. js对文字批注_实现SpreadJS的自定制批注
  3. 设计模式的理解:命令模式 (Command)
  4. caffe安装编译教程Ubuntu16.04(CPU)教程
  5. Ubuntu平台 Qt 5.x 安装方法
  6. mysql union order_MySQL中union和order by同时使用的实现方法
  7. 如何配置charles_抓包工具--charles(青花瓷)及获取AppStore数据包
  8. for循环中执行setTimeout问题(任务队列的问题)
  9. NETCORE openSUSE docker 安装
  10. android 模拟器Genymotion的安装和使用