SpringMVC的请求:获取请求参数

服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型参数:

基本类型参数

POJO类型参数

数组类型参数

集合类型参数

1.获得请求参数:获得基本类型参数

请求路径:http://localhost:8080/springmvc1/quick11?username=zhangsan&age=12

@RequestMapping(value="/quick11")

@ResponseBody

public void save11(String username,int age) throws IOException {

System.out.println(username);

System.out.println(age);}

2.获得请求参数:获得POJO类型参数

Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配。

public class User {

private String username;

private int age;

public String getUsername() {return username; }

public void setUsername(String username) {this.username=username;}

public int getAge() {return age;}

public void setAge(int age) {this.age=age;}

@Override

public String toString() {return"User{"+"username='"+ username +'\''+", age="+ age +'}';}}

@RequestMapping(value="/quick12")

@ResponseBody

public void save12(User user) throws IOException {

System.out.println(user);}

3.获得请求参数:获得数组类型参数

Controller中的业务方法数组名称与请求参数的name一致,参数值会自动映射匹配。

@RequestMapping(value="/quick13")

@ResponseBody

public void save13(String[] strs) throws IOException {

System.out.println(Arrays.asList(strs));}

4.获得请求参数:获得集合类型参数1

获得集合参数时,要将集合参数包装到一个POJO中才可以。

<form action="${pageContext.request.contextPath}/user/quick14"method="post">

<%--表明是第一个User对象的username age--%>

<input type="text"name="userList[0].username"><br/>

<input type="text"name="userList[0].age"><br/>

<input type="text"name="userList[1].username"><br/>

<input type="text"name="userList[1].age"><br/>

<input type="submit"value="提交">

</form>

public class VO {

private List<User> userList;

public List<User> getUserList() {return userList;}

public void setUserList(List<User> userList) {this.userList=userList;}

@Override

public String toString() {return"VO{"+"userList="+ userList +'}';}}

@RequestMapping(value="/quick14")

@ResponseBody

public void save14(VO vo) throws IOException {System.out.println(vo);}

5.获得请求参数:获得集合类型参数2

当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据而无需使用POJO进行包装。

<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script>

<script>

var userList = new Array();

userList.push({username:"zhangsan",age:18});

userList.push({username:"lisi",age:28});

$.ajax({type:"POST",url:"

${pageContext.request.contextPath}/user/quick15",data:JSON.stringify(userList),

contentType:"application/json;charset=utf-8"});

</script>

@RequestMapping(value="/quick15")

@ResponseBody

public void save15(@RequestBody List<User> userList) throws IOException {

System.out.println(userList);}

6.获得请求参数:静态资源访问的开启

7.获得请求参数:配置全局乱码过滤器

8.获得请求参数:参数绑定注解@RequestParam

当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定。

<form action="${pageContext.request.contextPath}/quick16" method="post">

<input type="text" name="name"><br>

<input type="submit" value="提交"><br>

</form>

@RequestMapping(value="/quick16")

@ResponseBody

public void save16(@RequestParam(value="name",required= false,defaultValue="itcast") String username) throws IOException {

System.out.println(username);}

9.获得请求参数:Restful风格的参数的获取

Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:

GET:用于获取资源              例:/user/1     GET : 得到 id =1 的 user

POST:用于新建资源            例:/user       POST: 新增 user

PUT:用于更新资源               例:/user/1   PUT: 更新 id=1 的 user

DELETE:用于删除资源        例:/user/1   DELETE: 删除 id=1 的 user

上述url地址/user/1中的1就是要获得的请求参数,在SpringMVC中可以使用占位符进行参数绑定。地址/user/1可以写成/user/{id},占位符{id}对应的就是1的值。在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。

http://localhost:8080/springmvc1/quick17/zhangsan

@RequestMapping(value="/quick17/{name}")

@ResponseBody

public void save17(@PathVariable(value="name") String username) throws IOException {

System.out.println(username);}

10.获得请求参数:自定义类型转换器

SpringMVC 默认已经提供了一些常用的类型转换器,例如客户端提交的字符串转换成int型进行参数设置。但是不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据自定义转换器。

public class DateConverter implements Converter<String, Date> {

public Date convert(String dateStr) {

//将日期字符串转换成日期对象 返回

SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");

Date date= null;

try {date= format.parse(dateStr);

} catch (ParseException e) {e.printStackTrace();}

return date;}}

@RequestMapping(value="/quick18")

@ResponseBody

public void save18(Date date) throws IOException {

System.out.println(date);}

11.获得请求参数:获得Servlet相关API

SpringMVC支持使用原始ServletAPI对象作为控制器方法的参数进行注入,常用的对象如下:

HttpServletRequest、HttpServletResponse、HttpSession

@RequestMapping(value="/quick19")

@ResponseBody

public void save19(HttpServletRequest request, HttpServletResponse response, HttpSession

session) throws IOException {

System.out.println(request);

System.out.println(response);

System.out.println(session);}

12.获得请求参数:获得请求头信息

使用@RequestHeader可以获得请求头信息,相当于web阶段学习的request.getHeader(name)

@RequestHeader注解的属性如下:

value:请求头的名称

required:是否必须携带此请求头

@RequestMapping(value="/quick20")

@ResponseBody

public void save20(@RequestHeader(value="User-Agent",required= false) String user_agent)

throws IOException {

System.out.println(user_agent);}

使用@CookieValue可以获得指定Cookie的值

@CookieValue注解的属性如下:

value:指定cookie的名称

required:是否必须携带此cookie

@RequestMapping(value="/quick21")

@ResponseBody

public void save21(@CookieValue(value="JSESSIONID") String jsessionId) throws IOException{

System.out.println(jsessionId);}

13.获得请求参数:文件上传

表单:

<form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">

名称<input type="text"name="username"><br/>

文件1<input type="file" name="uploadFile"><br/>

文件2<input type="file" name="uploadFile"><br/>

<input type="submit"value="提交">

</form>

添加依赖:

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.3.1</version>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.3</version>

</dependency>

配置多媒体解析器:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property name="defaultEncoding" value="UTF-8"/>

<property name="maxUploadSize"  value="500000"/>

</bean>

多文件上传,只需要将页面修改为多个文件上传项,将方法参数MultipartFile类型修改为MultipartFile[]即可

@RequestMapping(value="/quick23")

@ResponseBody

public void save23(String username, MultipartFile[] uploadFile) throws IOException {

System.out.println(username);

for (MultipartFile multipartFile : uploadFile) {

String originalFilename= multipartFile.getOriginalFilename();

multipartFile.transferTo(new File("C:\\upload\\"+originalFilename));}}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容