从 Java servlet 中的 POST 请求获取请求有效负载

2022-08-31 08:45:34

我有一个javascript库,它正在向我的Java servlet发送POST请求,但是在方法中,我似乎无法获得请求有效负载的内容。在chrome开发人员工具中,所有内容都在标题选项卡的“请求有效负载”部分中,并且内容在那里,我知道doPost方法正在接收POST,但它只是显示为空白。doPost

对于对象,我可以通过什么方式获取请求负载中的数据?HttpServletRequest

做或两者最终都没有数据request.getParameter()request.getAttributes()


答案 1

简单的答案:
使用 getReader() 读取请求的正文

详细信息:
有两种方法可以读取正文中的数据:

  1. getReader() 返回一个 BufferedReader,它将允许您读取请求的正文。

  2. getInputStream() 如果你需要读取二进制数据,则返回一个 ServletInputStream

文档中的注释:“[任一方法]都可以调用来读取正文,而不是两者兼而有之。


答案 2
String payloadRequest = getBody(request);

使用此方法

public static String getBody(HttpServletRequest request) throws IOException {

    String body = null;
    StringBuilder stringBuilder = new StringBuilder();
    BufferedReader bufferedReader = null;

    try {
        InputStream inputStream = request.getInputStream();
        if (inputStream != null) {
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            char[] charBuffer = new char[128];
            int bytesRead = -1;
            while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
                stringBuilder.append(charBuffer, 0, bytesRead);
            }
        } else {
            stringBuilder.append("");
        }
    } catch (IOException ex) {
        throw ex;
    } finally {
        if (bufferedReader != null) {
            try {
                bufferedReader.close();
            } catch (IOException ex) {
                throw ex;
            }
        }
    }

    body = stringBuilder.toString();
    return body;
}