文档章节

Spring MVC 请求参数

learn_more
 learn_more
发布于 2016/11/04 13:06
字数 663
阅读 59
收藏 0

1、无论是哪种请求(GET、POST、PUT、DELETE)都能通过如下方式获取携带在URL上的参数

URL:host:port/webapp/address?param=value&..

Map<String, String[]> requestParameterMap = request.getParameterMap();

这种获取参数的方式而且可以获取多次,也就是在调用Service之前或者之后都可以调用 request的方法获取参数,而且参数的值是和以前完全一样的。

 

2、POST、PUT 请求方式是通过请求体发送参数的,所以我们如何想要获取请求体中的参数使用request.getParameterMap(); 是不可行的,它只能获取 URL上的参数,如何获取请求体的参数呢,请求体的参数都是放在request的输入流当中,只要读流,同样输入流里也不会有URL携带的参数,使用如下方式:

try{

if(request.getMethod().toLowerCase().equals("put")){

InputStream is = request.getInputStream();

byte[] buffer = new byte[1024];

StringBuffer rs = new StringBuffer();

int len;

while ( (len = is.read(buffer)) != -1 ){

rs.append(new String(buffer,0,len));

}

System.out.println(rs);

}

}catch (Exception e){

e.printStackTrace();

}

但是他有一个很大的缺陷就是流只能读一次,因为读流的过程中index一直在移动,然而又不能reset,所以读完了之后就没有了,而且读完之后再去读都可能是 stream is closed. 所以一般如果是手动通过流的方式获取参数,得到参数之后应该把它放在 request.setAttribute 里面,方便下次获取,当然也可以使用 ThreadLocal,这样就可以到处使用。

 

3、Spring @RequestBody 可以帮我们从流中获取参数,但是他不会从URL中获取参数,如果需要从URL中获取参数应该是 @Param , 如果是 URL的address中有参数,如 webapp/{item}/list 需要获取 item这个参数的值应该是 @PathVariable 。

 

4、因为系统中不想有太多的代码,所以我们都是使用 request.getParameterMap(); 来替代 @Param但是 request.getParameterMap(); 有个很大的缺点,那就是获取的值的数据类型都是字符串,理论上URL携带的参数都应该都是字符串。可是如果你使用Spring的注解则可以自动转换对应的参数,尤其是使用 @RequestBody Map<String,Object> params 的时候,里面的参数类型是自动判断的,比如前端传来的 {"status":1} 和 {"status":"1"} 二者是不同的,前者被解析为Integer,后者则是 String,那么在我们使用Java 的 equals 方法时要注意,因为 首先判断的就是数据类型。

 

 

© 著作权归作者所有

learn_more
粉丝 94
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
Spring MVC 实践 - Base

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanqing280441589/article/details/51831530 标签 : Java与Web Spring Web MVC Spring-Web-MVC是一种基于请求...

菜鸟-翡青
2016/07/05
0
0
如何伪装成一个服务端开发(七)

目录 如何伪装成一个服务端开发(一) 如何伪装成一个服务端开发(二) 如何伪装成一个服务端开发(三) 如何伪装成一个服务端开发(四) 如何伪装成一个服务端开发(五) 如何伪装成一个服务端开发(六...

街角的小丑
01/04
0
0
SpringMVC基础知识 (1)

1. Spring体系结构  如图所示,MyBatis属于其管理下的ORM(持久层映射)层,而SpringMVC则属于Web-MVC处理层的框架。 Spring MVC有以下优点: Spring MVC技术是与Spring框架结合而成的,它同...

LeaveStyle
2018/08/31
0
0
SpringMVC 基于注解的Controller @RequestMapping @Request

概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能。现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller...

蓝狐乐队
2014/02/28
0
1
使用springMVC的详细步骤

使用springMVC的详细步骤   使用springMVC也可以代替struts2,当然只是代替业务分发的功能,struts2的一些其他功能它是没有的,不然要struts2有什么用。   下面我用springMVC代替struts2...

风中帆
2015/07/11
0
3

没有更多内容

加载失败,请刷新页面

加载更多

texlive安装

Installing to: D:/bin/texlive/texlive/2019Installing [001/307, time/total: ??:??/??:??]: adobemapping [2130k]Installing [002/307, time/total: 00:03/08:57]: ae [84k]Installing......

MtrS
28分钟前
2
0
运维规范

命名规范 发布流程 监控告警 故障定位 状态 日志 监控

以谁为师
今天
2
0
约瑟夫环(报数游戏)java实现

开端 公司组织考试,一拿到考题,就是算法里说的约瑟夫环,仔细想想 以前老师将的都忘了,还是自己琢磨把~ package basic.gzy;import java.util.Iterator;import java.util.LinkedList;...

无极之岚
今天
3
0
Kernel字符设备驱动框架

Linux设备分为三大类:字符设备,块设备和网络设备,这三种设备基于不同的设备框架。相较于块设备和网络设备,字符设备在kernel中是最简单的,也是唯一没有基于设备基础框架(device结构)的...

yepanl
今天
3
0
Jenkins 中文本地化的重大进展

本文首发于:Jenkins 中文社区 我从2017年开始,参与 Jenkins 社区贡献。作为一名新成员,翻译可能是帮助社区项目最简单的方法。 本地化的优化通常是较小的改动,你无需了解项目完整的上下文...

Jenkins中文社区
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部