在您的 Web 应用程序中,您将使用 JSON 数据向特定 URL 发送 POST 请求,并且您正在使用 HttpServletRequest访问 POST 数据。但是,在枚举请求参数时,只能找到“cmd”参数,而看不到 JSON 数据。
通常,您可以使用 request.getParameter("paramName" 来获取 Servlet 中的 GET 和 POST 参数“) 方法。当 POST 数据被编码为内容类型为“application/x-www-form-urlencoded”的键值对(如标准 HTML 表单中所示)时,这种方法效果很好。
在您的情况下,因为您如果要发送 JSON 数据流,您需要使用自定义解码器来处理可通过 request.getReader() 访问的原始数据流。以下是如何处理 JSON POST 处理的示例:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { StringBuffer jb = new StringBuffer(); String line = null; try { BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) jb.append(line); } catch (Exception e) { /*report an error*/ } try { JSONObject jsonObject = HTTP.toJSONObject(jb.toString()); } catch (JSONException e) { // crash and burn throw new IOException("Error parsing JSON request string"); } // Work with the data using methods like... // int someInt = jsonObject.getInt("intParamName"); // String someString = jsonObject.getString("stringParamName"); // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName"); // JSONArray arr = jsonObject.getJSONArray("arrayParamName"); // etc... }
总之,如果您正在处理 JSON POST 数据,则需要使用自定义解码器直接从请求正文处理它,而不是依赖内置的参数枚举机制。
以上是如何使用 HttpServletRequest 检索 JSON POST 数据?的详细内容。更多信息请关注PHP中文网其他相关文章!