java httpservletrequest获取body内容
时间: 2023-05-03 08:05:51 浏览: 130
在Java中使用HttpURLConnection或Apache HttpClient等类库向服务器发送POST请求会附带请求体(Body),请求体中包含了客户端发送给服务器的数据,有时客户端需要从请求体中获取数据,做额外的处理。使用HttpServlet编写服务端的时候,获取请求体中的数据可以通过ServletRequest对象来实现。
HttpServletRequest对象是Servlet处理请求时的参数,其中包含了请求头、请求方法、请求参数等信息。请求体的数据也可以通过HttpServletRequest对象来获取。
首先要理解HTTP请求的格式,分为请求头和请求体两部分。请求头中包含了HTTP请求的基本信息,例如请求方法、URI、协议版本、Cookies、Headers等信息。请求体中包含了请求的实体主体。对于GET请求,请求体是空的;而对于POST请求,请求体中一般存放以表单形式提交的数据,数据的格式有多种,例如JSON、XML、x-www-form-urlencoded等。
通过HttpServletRequest对象的getInputStream()方法可以获取请求体的InputStream,然后将InputStream转化为字符串即可获取请求体内容。
下面是一个示例代码:
```
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedReader reader = request.getReader();
StringBuilder stringBuilder = new StringBuilder();
char[] buffer = new char[1024];
int bytesRead;
while ((bytesRead = reader.read(buffer)) != -1) {
stringBuilder.append(buffer, 0, bytesRead);
}
String requestBody = stringBuilder.toString();
System.out.println(requestBody);
}
```
对于读取输入流的方法还有request.getReader()。建议使用getReader()获取字符流,getInputStream()获取字节流。
注意:不要同时使用request.getInputStream()和request.getReader()两种方法获取请求体,因为ServletRequest对象只能获取一次输入流。如果先通过getInputStream()获取了输入流,再通过getReader()获取字符流时就会抛出异常。如果需要在业务逻辑中多次读取请求体,可以先将读取的数据保存在一个变量中。
阅读全文