Obtener el parámetro enviado a través de jquery ajax en Java Servlet

Busco este tema en la web, pero no puedo obtener un ejemplo que funcionó. Voy a estar claro con alguien podría darme una ayuda.

esto es lo que estoy probando.

$.ajax({ url: 'GetJson', type: 'POST', dataType: 'json', contentType: 'application/json', data: {id: 'idTest'}, success: function(data) { console.log(data); } }); 

en Sevlet

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getParameter("id"); String id2[] = request.getParameterValues("id"); String id3 = request.getHeader("id"); } 

Me estoy volviendo nulo en todo.

La respuesta de clasificación es que estos datos están ocultos en la solicitud InputStream .

El siguiente servlet es una demostración de cómo puede usar esto (lo estoy ejecutando en un JBoss 7.1.1):

 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(name="fooServlet", urlPatterns="/foo") public class FooServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { InputStream is = req.getInputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream(); byte[] buf = new byte[32]; int r=0; while( r >= 0 ) { r = is.read(buf); if( r >= 0 ) os.write(buf, 0, r); } String s = new String(os.toByteArray(), "UTF-8"); String decoded = URLDecoder.decode(s, "UTF-8"); System.err.println(">>>>>>>>>>>>> DECODED: " + decoded); System.err.println("================================"); Enumeration e = req.getParameterNames(); while( e.hasMoreElements() ) { String ss = (String) e.nextElement(); System.err.println(" >>>>>>>>> " + ss); } System.err.println("================================"); Map map = makeQueryMap(s); System.err.println(map); ////////////////////////////////////////////////////////////////// //// HERE YOU CAN DO map.get("id") AND THE SENT VALUE WILL BE //// //// RETURNED AS EXPECTED WITH request.getParameter("id") //// ////////////////////////////////////////////////////////////////// System.err.println("================================"); resp.setContentType("application/json; charset=UTF-8"); resp.getWriter().println("{'result':true}"); } // Based on code from: http://www.coderanch.com/t/383310/java/java/parse-url-query-string-parameter private static Map makeQueryMap(String query) throws UnsupportedEncodingException { String[] params = query.split("&"); Map map = new HashMap(); for( String param : params ) { String[] split = param.split("="); map.put(URLDecoder.decode(split[0], "UTF-8"), URLDecoder.decode(split[1], "UTF-8")); } return map; } } 

Con la solicitud:

 $.post("foo",{id:5,name:"Nikos",address:{city:"Athens"}}) 

El resultado es:

 >>>>>>>>>>>>> DECODED: id=5&name=Nikos&address[city]=Athens ================================ ================================ {address[city]=Athens, id=5, name=Nikos} ================================ 

(NOTA: req.getParameterNames() no funciona. El mapa impreso en la 4ª línea contiene todos los datos normalmente accesibles utilizando request.getParameter() . Observe también la notación de objeto nested, {address:{city:"Athens"}}address[city]=Athens )


Ligeramente sin relación con su pregunta, pero en aras de la exhaustividad:

Si desea utilizar un analizador JSON del lado del servidor, debe usar JSON.stringify para los datos:

 $.post("foo",JSON.stringify({id:5,name:"Nikos",address:{city:"Athens"}})) 

En mi opinión, la mejor manera de comunicar JSON con el servidor es utilizando JAX-RS (o el equivalente de Spring). Es muy simple en servidores modernos y resuelve estos problemas.

Tuve el mismo problema con getParameter (“foo”) que devuelve null en el servlet. Encontré una solución simple que podría ser útil para las personas aquí. Use el valor predeterminado

 contentType='application/x-www-form-urlencoded; charset=UTF-8' 

o dejarlo afuera. Esto codificará automáticamente la solicitud con los datos en parámetros.

Espero que esto ayude…