SpringMVC 获取请求参数(精简版)
SpringMVC获取请求数据:
DispatcherServlet底层中获取请求数据并传递给单元方法使用。
DispatcherServlet会根据请求动态调用对应的单元方法处理,而请求先被DispatcherServlet接收,意味着DispatcherServlet中拥有此次请求相关的请求数据,那么就需要DispatcherServlet将请求数据传递给处理调用的单元方法,需要在单元方法中声明对应的形参接收请求数据。
紧耦方式获取请求数据:
使用:在单元方法中声明request形参,直接接收此次请求的request对象来获取请求数据;
缺点:需要使用request对象获取请求数据,需要类型转换或者对象的封装。
@RequestMapping("demoRequest")
public String demoRequest(HttpServletRequest request){
//获取请求数据
String uname=req.getParameter("uname");
int age= Integer.parseInt(req.getParameter("age"));
//处理请求数据
System.out.println("紧耦方式是,使用request对象获取:"+uname+age);
//响应处理结果
return "requestc.jsp";
}
解耦方式获取请求数据:
方式一:使用单元方法形参直接获取对应的请求数据;形参名和请求数据的键名一致;
好处是不用自己获取请求数据,会自动进行类型转换;
本质:DispatcherServlet底层会使用单元方法的形参名为键名获取此次的请求数据并赋值给单元方法使用;
注意:如果请求中不存在对应的请求数据,会将null值传递给单元方法,所以如果涉及到类型转换会出现转换异常;
@RequestMapping("demoParam")
public String demoParam(String uname,int age){
//处理请求
System.out.println("解耦方式一使用形参获取:"+uname+age);
//响应处理结果
return "param.jsp";
}
解耦方式二:使用形参别名获取请求数据
方式一存在的问题:使用单元方法的形参名和请求数据的键名一致可以获取请求数据,那么如果形参名和请求数据的键名不一致,会造成请求数据无法获取,就需要我们修改形参名让它与键名一致,但是不管怎么修改都会涉及到调用代码的修改,此时使用形参别名比较方便,别名的值和请求数据的键名一致;
使用:在单元方法的形参声明前使用@RequestParam(配置信息),声明别名;
本质:如果我们使用单元方法的别名,则DispatcherServlet底层会使用别名作为键名获取请求数据
@RequestParam注解的使用:
- value属性:值为形参的别名;
- defaultValue属性:设置形参的默认值,当请求中没有对应的请求数据时,则将默认值传递给单元方法的形参;
- required属性:设置根据别名必须能够获取到对应的请求数据,如果请求中没有则报400异常,不能和defaultValue属性同时使用;
@RequestMapping("demoParam2")
public String demoParam2(@RequestParam(value="uname",required = true) String uname2,@RequestParam(value="age") int age2){
//处理请求
System.out.println("解耦方式二使用形参别名获取:"+uname2+age2);
//响应处理结果
return "param2.jsp";
}
解耦方式三:使用对象获取请求数据
使用:在单元方法上声明实体类类型的形参,来获取请求数据,DispatcherServlet会将请求数据封装到形参类型的对象中,然后将对象传递给单元方法;实体类的属性名必须和请求数据的键名一致;
@RequestMapping("demoParam4")
public String demoParam4(String uname,User user){
//处理请求数据
System.out.println(user+":"+uname);
return "param4.jsp";
}
restful风格的请求数据获取:
传统的请求数据风格:localhost:8080/Sprint03/as?username=zhangsan&pwd=123
问题:传统方式会将请求数据以键值对的形式发送给后台使用,后台根据键名获取即可,但是键名是声明在前台代码的,造成后台代码和前台之间有了之间的联系,如果需要修改键名会造成后台的代码也需要修改;
解决:在请求中不声明键名,直接发送数据给后台,但是请求数据必须按照指定的规则来发送。
实现:使用restful规则
要求请求数据要直接在请求路径中附带,不使用问号拼接,但是数据在请求路径中的顺序必须按照指定的顺序声明,不能随便声明,因为后台会按照顺序获取路径中的请求数据;
eg: localhost:8080/project/as/zhangsan/123
SpringMVC获取restful路径中的数据:
- 在单元方法的别名中使用{键名}的方式进行参数占位;
- 在单元方法的形参声明前使用注解@PathVariable("占位的键名")将数据赋值给形参;
@RequestMapping("demoRest/{un}/{pw}")
public String demoRest(@PathVariable("un") String username, @PathVariable("pw") String pwd){
//处理请求数据
System.out.println(uname+":"+pwd);
return "rest.jsp";
}
SpringMVC 获取请求参数(精简版)的更多相关文章
- SpringMVC 获取请求参数
1.获取Request response对象 在SpringMVC的注解开发中,可以选择性的接收Request和Response对象来使用 2.获取request对象请求参数 a.通过request对 ...
- SpringMVC获取请求参数-POJO类型参数
1.Controller中的业务方法的POJO参数的属性名与请求参数一致,参数值会自动映射匹配 1.创建POJO类 public class User { private String usernam ...
- SpringMVC获取请求参数-基本类型
1.Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配 (json形式) <dependency> <groupId>com.faste ...
- SpringMVC获取请求参数-集合类型
1.创建User实体类 ```java public class User { private String username; private int age; public String getU ...
- 学习SpringMVC——如何获取请求参数
@RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView) ...
- springMvc源码学习之:spirngMVC获取请求参数的方法2
@RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他 (@CookieValue)!她(@ModelAndView ...
- SpringMVC之请求参数的获取方式
转载出处:https://www.toutiao.com/i6510822190219264516/ SpringMVC之请求参数的获取方式 常见的一个web服务,如何获取请求参数? 一般最常见的请求 ...
- 【SpringMVC】获取请求参数
通过ServletAPI获取 test.html <a th:href="@{/testServletAPI(username='admin',password=123456)}&qu ...
- springMVC(spring)+WebSocket案例(获取请求参数)
开发环境(最低版本):spring 4.0+java7+tomcat7.0.47+sockjs 前端页面要引入: <script src="http://cdn.jsdelivr.ne ...
- 学习SpirngMVC之如何获取请求参数
学习SpringMVC——如何获取请求参数 @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@Cooki ...
随机推荐
- Java——面向对象(static关键字开始)
一.static 可以修饰成员变量和成员方法 关键字特点: 随着类的加载而加载: 优先于对象存在: 被类的所有对象共享: 可以通过类名直接调用: 注意事项: 在静态方法中是没有this关键字的 静态的 ...
- 一套开源、强大且美观的WPF UI控件库 - HandyControl
前言 今天给大家推荐一套开源.强大且美观的WPF UI控件库:HandyControl. WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用.它提供了灵 ...
- 2019牛客国庆集训派对day3 G排列(状压dp)
题目传送门 一道很好的状压DP,状态是当前的占位情况,排序操作和第21次CSP认证的第四题作用类似. #include<cstdio> #include<vector> #in ...
- Gson和fastJson应用场景
如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean 二.Google的Gson包的使用简介. Gson类:解析json的最基础的工 ...
- Aiganize微信小程序开发手册二代
根据此表格, 现有三个模块: 活动模块 聊天模块 影子模块 现活动模块交与:赵坤亮.郝文章做 现聊天模块与用户信息交与:葛方杰.陈金鹏做影子模块待定,现做完那两块,已经有不错的用户体验了.
- out.print()
在学习过程中发现跟着视频打out.print报错 查阅资料知道 新建Java工程时,应选择Java Enterprise而非Java里的webapplication(Java Enterprise会自 ...
- Mybatis-Flex之QueryWrapper
1.完整DQL语句 /** * 使用QueryWrapper构建超复杂SQL语句 */ @Test public void testQueryWrapper1() { QueryWrapper wra ...
- Tarjan 学习笔记
萌新刚学Tarjan,啥也不会,肯定一堆错,请大佬指正谢谢 前置 强连通 强连通: 在不是强连通图的有向图\(G\)内,其顶点\(u\),\(v\)两个方向上都存在有向路径,则\(u\)和\(v\)强 ...
- bash shell笔记整理——basename和dirname命令
bashname命令作用 去掉给定name的目录部分,如果指定了 SUFFIX, 就 同时去掉SUFFIX(后缀).具体看示例吧. bashname语法 Usage: basename NAME [S ...
- MySQL 事务的基础知识
事务的基础知识 1. 数据库事务概述 事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库中的数据始终保持 一致性,同时我们还能通过事务的机制 恢复到某个时间地点的数据,这样可以保证已 ...