servlet recibir httpservletrequest from example all java servlets post

recibir - json java servlet jquery



Obtener el cuerpo de solicitud POST de HttpServletRequest (7)

En Java 8, puede hacerlo de una manera más simple y limpia:

if ("POST".equalsIgnoreCase(request.getMethod())) { test = req.getReader().lines().collect(Collectors.joining(System.lineSeparator())); }

Estoy tratando de obtener todo el cuerpo del objeto HttpServletRequest.

El código que estoy siguiendo se ve así:

if ( request.getMethod().equals("POST") ) { StringBuffer sb = new StringBuffer(); BufferedReader bufferedReader = null; String content = ""; try { //InputStream inputStream = request.getInputStream(); //inputStream.available(); //if (inputStream != null) { bufferedReader = request.getReader() ; //new BufferedReader(new InputStreamReader(inputStream)); char[] charBuffer = new char[128]; int bytesRead; while ( (bytesRead = bufferedReader.read(charBuffer)) != -1 ) { sb.append(charBuffer, 0, bytesRead); } //} else { // sb.append(""); //} } catch (IOException ex) { throw ex; } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException ex) { throw ex; } } } test = sb.toString(); }

y estoy probando la funcionalidad con curl y wget de la siguiente manera:

curl --header "MD5: abcd" -F "[email protected] http://localhost:8080/abcd.html" wget --header="MD5: abcd" --post-data=''{"imei":"351553012623446","hni":"310150","wdp":false}'' http://localhost:8080/abcd.html"

Pero el while ( (bytesRead = bufferedReader.read(charBuffer)) != -1 ) no devuelve nada, por lo que no se agrega nada en StringBuffer.


Esto funciona tanto para GET como para POST:

@Context private HttpServletRequest httpRequest; private void printRequest(HttpServletRequest httpRequest) { System.out.println(" /n/n Headers"); Enumeration headerNames = httpRequest.getHeaderNames(); while(headerNames.hasMoreElements()) { String headerName = (String)headerNames.nextElement(); System.out.println(headerName + " = " + httpRequest.getHeader(headerName)); } System.out.println("/n/nParameters"); Enumeration params = httpRequest.getParameterNames(); while(params.hasMoreElements()){ String paramName = (String)params.nextElement(); System.out.println(paramName + " = " + httpRequest.getParameter(paramName)); } System.out.println("/n/n Row data"); System.out.println(extractPostRequestBody(httpRequest)); } static String extractPostRequestBody(HttpServletRequest request) { if ("POST".equalsIgnoreCase(request.getMethod())) { Scanner s = null; try { s = new Scanner(request.getInputStream(), "UTF-8").useDelimiter("//A"); } catch (IOException e) { e.printStackTrace(); } return s.hasNext() ? s.next() : ""; } return ""; }




Si está tratando de analizar y desea manejar las cargas de archivos, use Commons FileUpload , que maneja todo el análisis, tanto campos como datos de archivos.

FWIW, el código funciona para mí como está usando cualquiera de los comandos.

¿Qué es todo el servlet y su mapeo?

Son los comandos que publica errores tipográficos? No funcionarán como están.


Si todo lo que desea es el cuerpo de la solicitud POST, puede usar un método como este:

static String extractPostRequestBody(HttpServletRequest request) throws IOException { if ("POST".equalsIgnoreCase(request.getMethod())) { Scanner s = new Scanner(request.getInputStream(), "UTF-8").useDelimiter("//A"); return s.hasNext() ? s.next() : ""; } return ""; }

Crédito a: https://.com/a/5445161/1389219


Tenga en cuenta que su código es bastante ruidoso. Sé que el hilo es viejo, pero mucha gente lo leerá de todos modos. Puedes hacer lo mismo usando la biblioteca de guava con:

if ("POST".equalsIgnoreCase(request.getMethod())) { test = CharStreams.toString(request.getReader()); }