使用springmvc的controller层获取到请求的数据方式
目录
- content-type
- 1.application/x-www-form-urlencoded
- 1.1 String 参数值=reqeust.getParameter(“参数名”);
- 1.2 Map paramMap=request.getParameterMap();
- 2.multipart/form-data
- 3.text/xml
- 4.application/json
- 4.1 页面请求的数据获取
- 4.1.1 页面js请求如下
- 4.1.2 如果页面js请求如下
- 4.1总结
- 4.2 当别的应用调用我们的服务
javaweb应用开发,最常用到的就是应用之间的信息交互,调用别的应用模块得到自己想获取的数据信息,然后解析数据并进行处理返回到上一层。那controller层的方法如何获取http请求/webservice请求中的参数,或者说请求数据呢?【使用springmvc的controller层获取到请求的数据方式】按照我个人的接触和理解,把请求可以分为两大类:
1.页面请求到后台controller层的请求。
2.别的应用http/webservice调用本应用中封装接口的请求。
无论哪种方式的请求,都是http请求(webservice底层也是http请求,待考证),controller层对请求数据的解析是按照json还是xml的依据就是请求头content-type,接下来我们就先来详细介绍一下。
content-type content-type请求头是干吗的呢,http请求头有四种类型,分别是通用头部,请求头部,响应头部以及内容头部. 首先,我们要弄清楚,content-type是属于内容头部,既然是内容头部,那这个请求头是用来向接收端解释传递的该内容主体的,content-type的取值是告诉服务端,你传递过去的内容是啥,你应该准备好如何接收和解析。常用的content-type可以分为application/x-www-form-urlencoded , multipart/form-data ,application/json , text/xml四种。
下面一一介绍
1.application/x-www-form-urlencoded application/x-www-form-urlencoded是常用的表单发包方式,普通的表单提交(即不带文件上传的提交),或者js (例如:post方式)发包,默认都是通过这种方式,提交代码demo如下:
function searchInfo() {$("#cxjg").datagrid({url : basepath + 'jijin/getList',queryParams : getParam($("#query").serializeArray()),method : "post"}); function searchInfo(){$("#cxjg").datagrid({url:basepath+'jijin/getList',queryParams : {'age':23,'name':'zhangsan'},method:"post"});
请求头信息如下所示,可以看到content-type和FormData(表单的数据格式)
文章图片
如何获取这种数据结构的请求?有两种方式来解决
1.1 String 参数值=reqeust.getParameter(“参数名”);
(以springmvc 的controller层的方法为例)
@RequestMapping("/getParam")public String getParamFromRequest(HttpServletRequest request){String jiJinCode=(String)request.getParameter("jinJinCode"); ...}
1.2 Map paramMap=request.getParameterMap();
@RequestMapping("/getParam")public String getParamFromRequest(HttpServletRequest request){Map paramMap=request.getParameterMap(); StringBuffer inputDate=new StringBuffer(); inputDate.append(""); for(Map.Entry entry :paramMap.entrySet()){String key=entry.getKey(); String[] values=entry.getValue(); String value=https://www.it610.com/article/null; if(values.length>0){value=https://www.it610.com/article/values[0]; }inputDate.append("<"+key+">"+value+""+key+">"); }return inputDate.toString(); }
两种方法比较来说,第一种适合当参数不多时,可以一个一个取。但第二种则是遍历出所有的请求参数,并生成标签格式,利于自动生成报文格式。
2.multipart/form-data multipart/form-data用在页面(提交)发送文件的POST请求。之所以会和第一种content-type同是post提交,为啥在这里就变成multipart/form-data了呢?
当然程序不会自动识别是不是文件,而是我们在