Zugriff auf JSON-POST-Daten in HttpServletRequest
Beim HTTP-POSTing von Daten im JSON-Format an ein Servlet ist es notwendig, die verschiedenen beteiligten Datenkodierungen zu verstehen . Standardmäßig können Servlets Parameter mit request.getParameter() abrufen. Für JSON-Daten wird jedoch nicht das Standardcodierungsschema „application/x-www-form-urlencoded“ verwendet.
Um JSON-POST-Daten abzurufen, müssen Sie einen benutzerdefinierten Decoder verwenden, der den Rohdatenstrom verarbeitet aus request.getReader(). Hier ist ein Beispiel mit dem Paket org.json:
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... }
Dieser Code liest den JSON-Datenstrom aus der Anfrage, analysiert ihn mit dem Paket org.json und speichert das Ergebnis in einem JSONObject. Anschließend können Sie mit Methoden wie jsonObject.getInt(), jsonObject.getString() usw. auf die JSON-Parameter zugreifen.
Beachten Sie, dass dieser Ansatz nicht auf JSON-Daten beschränkt ist. Sie können dieselbe Technik verwenden, um jede Art von benutzerdefinierten POST-Daten zu verarbeiten, die nicht als Schlüssel-Wert-Paare codiert sind.
Das obige ist der detaillierte Inhalt vonWie greife ich in einem HttpServletRequest auf JSON-POST-Daten zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!