在spring MVC中如何获取请求体呢?
在spring MVC中如何获取请求要素呢?
通过如下方法:
/** * Compatible with GET and POST * * @param request * @return : <code>String</code> * @throws IOException */ public static String getRequestQueryStr(HttpServletRequest request, String charEncoding) throws IOException { String submitMehtod = request.getMethod(); if (submitMehtod.equalsIgnoreCase("post")) { byte[] bytes = getRequestPostBytes(request); String charEncoding2 = request.getCharacterEncoding();// charset System.out.println("[getRequestQueryStr]charEncoding:" + charEncoding2); System.out.println("[getRequestQueryStr]Content-Type:" + request.getHeader(Constant2.REQUEST_HEADER_CONTENT_TYPE)); if(ValueWidget.isNullOrEmpty(charEncoding)){ charEncoding=SystemHWUtil.CHARSET_UTF; } return new String(bytes, charEncoding); } else {// form method :Get return request.getQueryString(); } }
对GET请求的参数是没有问题的,但是对于POST请求获取不到为什么呢?
因为spring MVC已经获取了一遍request的stream,所以再次获取时是为空的,(这是输入流的特性,可以查查官网API),所以我获取到request 的InputStream之后调用reset,但是报错,不支持reset操作.
怎么办呢?
在spring MVC 的控制器中使用@RequestBody 注解,作用是获取请求体,格式是字节数组,见代码
@ResponseBody @RequestMapping(value = "/jsonStub", produces = SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF) public String json(Model model, HttpSession session,@RequestBody byte[]bytes, HttpServletRequest request, String callback) throws IOException { Map map=WebServletUtil.parseRequest(request, null); if(ValueWidget.isNullOrEmpty(map)){ String postStr=new String(bytes,SystemHWUtil.CURR_ENCODING);//username=huangwei&password=123 System.out.println("postStr:"+postStr);//username=%E9%BB%84%E5%A8%81&password=123 postStr=URLDecoder.decode(postStr,SystemHWUtil.CURR_ENCODING);//{"username":"黄威","password":"123"} map=WebServletUtil.parseRequestStr(postStr, true); } String content = HWUtils.getJsonP(map, callback); return content; }
@RequestBody后紧跟的参数将被注入请求体的字节数组(spring mVC帮我们完成的).
注意:request.getInputStream() 读取一次之后,再次读取就读取不到
上述代码依赖的方法:
/*** * Get request query string, form method : post * * @param request * @return byte[] * @throws IOException */ public static byte[] getRequestPostBytes(HttpServletRequest request) throws IOException { int contentLength = request.getContentLength(); /*当无请求参数时,request.getContentLength()返回-1 */ if(contentLength<0){ return null; } byte buffer[] = new byte[contentLength]; for (int i = 0; i < contentLength;) { int readlen = request.getInputStream().read(buffer, i, contentLength - i); if (readlen == -1) { break; } i += readlen; } return buffer; } /*** * Get request query string, form method : post * * @param request * @return * @throws IOException */ public static String getRequestPostStr(HttpServletRequest request) throws IOException { byte buffer[] = getRequestPostBytes(request); String charEncoding = request.getCharacterEncoding(); if (charEncoding == null) { charEncoding = "UTF-8"; } return new String(buffer, charEncoding); }
参考:http://json20080301.iteye.com/blog/1874074?utm_source=tuicool
相关推荐
spring mvc 拦截器获取请求数据信息 解压之后放到项目中 直接运行就可以了 (将流多次运用)
主要给大家介绍了关于Spring MVC请求参数与响应结果全局加密和解密的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
慨括了spring mvc请求参数常见的几种获取方法
3.Spring MVC 请求参数的获取案例 4.Spring MVC 域对象共享数据案例 5.Spring MVC @ModelAttribute 注解案例 6.Spring MVC 国际化案例 7.Spring MVC 请求转发与请求重定向案例 8.Spring MVC 下载 Excel 文档的需求...
spring boot+spring mvc+spring代理请求**音乐接口获取数据,然后提供给**小程序做显示 运行环境 jdk8+IntelliJ IDEA+maven 项目技术(必填) spring boot+spring mvc+spring 数据库文件 无,通过**音乐接口获取...
项目描述 spring boot+spring mvc+spring代理请求音乐接口获取数据,然后提供给微信小程序做显示 运行环境 jdk8+IntelliJ IDEA+maven 项目技术(必填) spring boot+spring mvc+spring
springboot中controller的使用和配置,可在spring mvc框架中应用获取前端请求处理请求并返回数据显示
【源码】mysql版本_spring3.0 系统模块 1....服务器内部GET POST 请求 25.uploadify 上传插件,单条、批量上传,带进度条,异步,图片、视频, 其它文件格式均可上传 26.地图选点获取经纬度坐标,根据俩经纬度计算距离
这样就可以在每次请求的时候获取到session的信息。 下面以spring MVC以例来说明如果创建分步式session. 1、login – 登录页 login表示用户跳转到登录页面,这个时候可以生成唯一key为sessionid的ses
获取请求数据 产生回应 讯息转换器 渲染视图 类型转换 验证 形式 上传文件 异常处理 要获取代码: 克隆存储库: $ git clone git://github.com/SpringSource/spring-mvc-showcase.git 如果这是您第一次使用Github...
本篇文章主要介绍了Spring3 MVC请求参数获取的几种方法小结,非常具有实用价值,需要的朋友可以参考下。
Spring-MVC-REST-GET-单元测试 Spring MVC REST JSON获取请求单元测试示例。 有关更多详细信息,请参考
1. spring杂谈[原创] 1.1 Spring事务处理时自我调用的解决方案及一些实现方式的风险 ...1.32 Spring3 Web MVC下的数据类型转换(第一篇)——《跟我学Spring3 Web MVC》抢先看 1.33 Spring 注入集合类型
Spring MVC 是一个建立在中央前端控制器servlet(DispatcherServlet)的MVC模式Web框架,它负责发送每个请求到合适的处理程序,使用视图来最终返回响应结果的概念。Spring MVC 是 Spring 产品组合的一部分,它享有 ...
使用Spring MVC或Spring Boot中打印或记录日志一般使用AOP记录Request请求和Response响应参数,在不使用AOP的前提下,如果在Filter中打印日志,在打印或消费请求类型为Content-Type:application/json的请求时,会...
获取请求数据 生成响应 消息转换器 渲染视图 类型转换 验证 形式 上传文件 异常处理 获取代码: 克隆存储库: $ git clone git://github.com/SpringSource/spring-mvc-showcase.git 如果这是您第一次使用 Github...
主要给大家总结介绍了关于Spring MVC请求参数接收的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、...
【源码】oracle版本_spring3.0 系统模块 1....服务器内部GET POST 请求 25.uploadify 上传插件,单条、批量上传,带进度条,异步,图片、视频, 其它文件格式均可上传 26.地图选点获取经纬度坐标,根据俩经纬度计算距离
主要介绍了详解在Spring MVC或Spring Boot中使用Filter打印请求参数问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧