Tengo que enviar dos arreglos a un servlet, uso una llamada Ajax POST que envía un objeto JSON, y luego tengo que leer los datos enviados en dos listas o arreglos en una clase de servlet en Java. Prefiero no usar jQuery para llamadas Ajax. No estoy muy familiarizado con json, utilicé un código que se encuentra en stackoverflow y no puedo entender si hay un problema al enviar o analizar datos.
Este es el método para realizar la llamada Ajax en Javascript, donde cback es la función de devolución de llamada, method = "POST" y url es la url del servlet:
function makeCall(method, url, from, to, cback) { var req = new XMLHttpRequest(); req.onreadystatechange = function() { cback(req) }; req.open(method, url); var obj = {}; obj["from"] = from; obj["to"] = to; var data = JSON.stringify(obj); req.send(data); }Aquí está el método doPost en el controlador de servlet especificado por la url. Aquí es donde encontré el problema: después de hacer getParameter, las cadenas json1 y json2 son nulas:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //... String json1 = request.getParameter("from"); String json2 = request.getParameter("to"); Gson gson = new Gson(); ArrayList<Double> listFrom = gson.fromJson(json1, new TypeToken<ArrayList<Categoria>>() {}.getType()); ArrayList<Double> listTo = gson.fromJson(json2, new TypeToken<ArrayList<Double>>() {}.getType()); //... }Su ajax está enviando JSON pero su servidor está esperando datos de formulario, que tienen JSON.
Para enviar los datos como su servidor espera, codifique cada matriz en JSON y envíelos como datos de formulario
function makeCall(method, url, from, to, cback) { var req = new XMLHttpRequest(); req.onreadystatechange = function() { cback(req) }; req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); req.open(method, url); var params = new URLSearchParams({to: JSON.stringify(to), from: JSON.stringify(from)}); req.send(params.toString()); }