Normalnie można dostać i parametry POST w serwletu taki sam sposób:
request.getParameter("cmd");
Ale tylko wtedy, gdy dane POST jest encoded jako par klucz-wartość typu zawartości: "application/x-www-form-urlencoded" jak po użyciu standardowego formularza HTML.
Jeśli używasz innego schematu kodowania dla danych pocztowych, jak w przypadku, gdy piszesz strumień danych json, trzeba użyć niestandardowego dekodera, który może przetwarzać surowego strumienia danych z:
BufferedReader reader = request.getReader();
Json przykład przetwarzanie końcowe (używa org.json pakietów)
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...
}
Jest to prosta metoda uzyskiwania danych żądania 'request.getReader(). Lines().zbieramy (Collectors.joining()) ' –
wyżej wspomniany strumień rzutów już zamknięty wyjątek – Pat
Jeśli użyjesz' getReader() 'strumień zostanie zamknięty, ponieważ pierwotnie można go odczytać tylko raz. Istnieje wiele alternatyw dla implementacji Wrapper, aby umożliwić wiele wywołań do 'getReader()' –