我们放在body里的数据
我们有时候通过HttpServletRequest.getInputStream()读取body里的数据
private String getBody(HttpServletRequest request) throws IOException { InputStream in = request.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in, Charset.forName("UTF-8"))); StringBuffer sb = new StringBuffer(""); String temp; while ((temp = br.readLine()) != null) { sb.append(temp); } if (in != null) { in.close(); } if (br != null) { br.close(); } return sb.toString(); }
注意,这里有了一次request.getInputStream()调用。
但是在测试时,一直报JSON格式不正确的错误。经调查发现,项目中使用了公司基础组件中的Filter,而该Filter中也解析了body。同时,不出所料,也是通过调用getInputStream()方法获取的。
原来:
因此,当自己写的Filter中调用了一次getInputStream()后,后面再调用getInputStream()读取的数据都为空,所以才报JSON格式不正确的错误。
注意:@RequestBody 和 @RequestParam 都不能配合request.getInputStream()使用,因为@RequestBody 和 @RequestParam也是读取body里数据
参考:HttpServletRequest中读取HTTP请求的body