在接口开发中,使用POST提交请求时,通常使用json字符串的形式,但是在服务器端却通常获取不到参数,request.getParameter("XX")一般都是为空,此时,我们需要获取post提交的body,在解析参数,附上代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
public class HttpServletRequestReader
{
// 方法一
public static String ReadAsChars(HttpServletRequest request)
{
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = request.getReader();
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
}catch (IOException e) {
e.printStackTrace();
}finally{
if (null != br) {
try {
br.close();
} catch (IOException e){
e.printStackTrace();
}
}
}
return sb.toString();
}
// 方法二
public static void ReadAsChars2(HttpServletRequest request)
{
InputStream is = null;
try
{
is = request.getInputStream();
StringBuilder sb = new StringBuilder();
byte[] b = new byte[4096];
for (int n; (n = is.read(b)) != -1;)
{
sb.append(new String(b, 0, n));
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (null != is)
{
try
{
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
// 二进制读取
public static byte[] readAsBytes(HttpServletRequest request)
{
int len = request.getContentLength();
byte[] buffer = new byte[len];
ServletInputStream in = null;
try
{
in = request.getInputStream();
in.read(buffer, 0, len);
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (null != in)
{
try
{
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return buffer;
}
}
本文介绍了解析HTTP POST请求中的Body部分的方法,提供了两种不同的方式来读取请求体:一种是字符流的方式,另一种是字节流的方式,并给出了具体的Java实现代码。
977

被折叠的 条评论
为什么被折叠?



