Springmvc之接受请求参数二
Springmvc之接受请求参数
准备工作
- 新建一个表单提交
- 请求地址:
http://localhost:8080/ProjectName/user/login.do <form action="<%=request.getContextPath()%>/user/login.do" method="post">
username:<input type="text" name="username"> <br>
password:<input type="text" name="password"> <br>
age:<input type="text" name="age">
<input type="submit" value="提交">
</form>
【不推荐】HttpServletRequest
- 直接使用
HttpServeletRequest作为方法参数,spring会自动为其注入 - 需要手动转换参数的类型
@RequestMapping(value="/login.do")
public String login(HttpServletRequest request,HttpServletResponse response){
String username=request.getParameter("username");
String password=request.getParameter("password");
int age=Integer.parseInt(request.getParameter("age")); //转换类型
System.out.println(username+"--->"+password);
return "success";
}直接在方法中声明对应的参数(name的属性必须和方法参数一致)
- 表单中的
name属性要和方法中的参数一致 - 涉及到类型转换,直接在方法中申明不同类型的参数即可
- 优点: 方便,并且可以使Springmvc自动处理数据类型
@RequestMapping(value = "/login.do")
public String login(String username,String password,Integer age) {
System.out.println(username + "--->" + password+"----->"+age);
return "success";
}【推荐】@RequestParam
- 使用该注解可以获取请求参数,方法中的参数可以与表单中的
name属性不一致 - 使用
@RequestParam这个获取的值必须包含在请求参数中,否则报错,除非设置required属性为false/**
* 使用@RequestParam获取请求参数
* @RequestParam()中的value属性为form表单中对应的name属性
* 自动转换数据类型,只需要定义方法参数为所需的数据类型即可,spring会为我们自动转换
*/
@RequestMapping(value = "/login.do")
public String login(@RequestParam(value = "username") String name,
@RequestParam("password") String pwd,@RequestParam("age") Integer age) {
System.out.println(name + "--->" + pwd+"----->"+age);
return "success";
}属性
value指定请求中对应的属性名称,这个就像表单中定义的name属性required
指定是否这个参数必须包含在请求地址中,默认是true,即是如果不包含这个参数那么就会报错。defaultValue指定默认的值,如果设置了required=false,并且没有设置这个值,那么默认的是null,但是也是可以使用这个属性来设置参数默认的值。当然对于设置了int类型的参数,那么并没有指定其值,那么将会报错,因为int类型没有null,只有Integer类型的才有,因此需要设置成Integer
/*
* 这里的获取请求参数中的username,age的值
* 其中username的这个注解默认的是required=true,因此这个是不可以没有的
* age的这个注解设置了required=false,表示可以没有这个参数,但是如果没有这个参数,那么默认的是null,但是int类型的没有null,因此也会是报错的,有两种解决方式:
* 1) 通过defalutValue设置其默认的值
* 2) 如果我们就想要设其为null,可以使用封装类Integer类型即可
*/
@RequestMapping(value = "/testRequestParams")
public String testRequestParams(@RequestParam(value="username") String username,@RequestParam(value="age",required=false) int age) {
System.out.println("username,age "+ username+" , "+age);
return SUCCESS;
}【推荐】使用自定义数据类型(JavaBean)
- 如果传过来的请求参数很多,那么我们使用上面的方法获取请求参数,需要申明很多的方法参数。但是我们可以将传递过来的请求参数封装成一个
JavaBean,那么我们直接传入一个JavaBean对象即可接收全部的请求参数。 - 声明一个User类,其中必须为每一个属性添加
set方法,并且其中的变量名要和表单中的name属性一致 public class User {
private String username;
private String password;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
} }- 那么我们此时的
UserController中的login方法如下:
@RequestMapping(value = "/login.do")
public String login(User user) {
System.out.println(user);
return "success";
}总结
- 以上的所有方法并不冲突,可以混合使用
/**
* 混合使用案例
*/
@RequestMapping(value = "/login.do")
public String login(User user,@RequestParam("gender")String gender) {
System.out.println(user);
return "success";
}- 不建议使用
HttpServletRequest方法获取,另外两种方法都是非常好用的方法,根据实际情况进行选取即可
- 那么我们此时的
- 如果传过来的请求参数很多,那么我们使用上面的方法获取请求参数,需要申明很多的方法参数。但是我们可以将传递过来的请求参数封装成一个
- 表单中的
Springmvc之接受请求参数二的更多相关文章
- SpringMvc接受请求参数的几种情况演示
说明: 通常get请求获取的参数是在url后面,而post请求获取的是请求体当中的参数.因此两者在请求方式上会有所不同. 1.直接将接受的参数写在controller对应方法的形参当中(适用于get提 ...
- SpringMVC中post请求参数注解@requestBody使用问题
一.httpClient发送Post 原文https://www.cnblogs.com/Vdiao/p/5339487.html public static String httpPostWithJ ...
- Struts2接受请求参数三种常用方法
一 接受请求参数主要有三种:属性驱动 对象驱动 模型驱动<model Driven> 方式1:在Action中接收请求参数不需要使用request对象,在Action中定义与请求参数相同名 ...
- 【SpringMVC】获取请求参数
通过ServletAPI获取 test.html <a th:href="@{/testServletAPI(username='admin',password=123456)}&qu ...
- struts2接受请求参数
https://blog.csdn.net/y249839817/article/details/77702745 https://blog.csdn.net/nthack5730/article/d ...
- SpringMVC 接受请求参数、作用域传值
目录 原生servlet接收参数 Spring MVC最基础的参数获取 接收基本数据类型参数 方法参数列表和请求参数不一致的处理方式 接收对象引用数据类型 接收复选框这种多个同名的参数 接收obj.f ...
- SpringMVC接受请求参数、
1. 接收请求参数 1.1. [不推荐]通过HttpServletRequest 在处理请求的方法中,添加HttpServletRequest对象作为参数,在方法体中,直接调用参数对象的getPara ...
- 学习SpringMVC——如何获取请求参数
@RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView) ...
- SpringMVC没有接受到参数的坑
其实说上来也不是SpringMVC的坑. 相同的一份代码,我在windows上用mvn打成jar放到linux上执行,POST请求可以接收到参数: 但是我直接在linux上从git拉取分支,并在lin ...
随机推荐
- spring 深入reading
http://wenku.baidu.com/view/8db141624a7302768e9939b3.html http://docs.spring.io/spring/docs/4.2.1.BU ...
- 关于chrome插件编写的小结
一个插件的大致目录结构如下: 其中manifest文件最为重要,它定义/指明插件应用的相关信息(权限.版本.功能说明等),点此查看Manifest的详情>> 这里有一篇chrome官方 ...
- Android 开发:由模块化到组件化(一)
在Android SDK一文中,我们谈到模块化和组件化,现在我们来聊聊组件化开发背后的哪些事.最早是在广告SDK中应用组件化,但是同样适用于普通应用开发 以下高能,请做好心理准备,看不懂请发私信来交流 ...
- 用开源项目SwitchButton实现各种风格的switch
今天介绍的开源项目是否的优秀,又是国人的作品.之前我接触过很多很多的自定义switch,有些动画僵硬,有些不能自定义switch的宽度,有些只能定义宽度不能设置滑块的宽高.但,这个项目提供了各种定制的 ...
- 在EditText中限制输入,自定义样式,监听输入的字符,自动换行
自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="matc ...
- Mysql 的子查询
子查询: 子查询:嵌套在其它查询中的查询语句.(又称为内部查询) 主查询:包含其它子查询的查询称为主查询.(又称外部查询) 非相关子查询: 在主查询中,子查询只需要执行一次,子查询结果不再变化,供主查 ...
- Mysql 编译安装并使用自定义用户启动
本文基于 Redhat Linux 6.7 的环境,Mysql 版本为 5.5.37 安装前的检查 必备的组件,如果没有使用 yum 进行安装,可以使用网上的源,也可以使用本地光盘作为 Yum 源. ...
- 可重入读写锁ReentrantReadWriteLock基本原理分析
前言 本篇适用于了解ReentrantLock或ReentrantReadWriteLock的使用,但想要进一步了解原理的读者.见于之前的分析都是借鉴大量的JDK源码,这次以流程图的形式代替源码,希望 ...
- 突发奇想-取缔宏定义,用另外一种语言来做C++的部分外层封装
突发奇想:用一种语言 来编写C++外挂,可以替代宏定义,可以这么做,在C++里面加入特定标签,比如<javascript></javascript>中间的代码可以翻译成C++代 ...
- Chart:ECharts
ylbtech-Chart:ECharts ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome, ...