como retornar vários objects json do servlet java usando uma solicitação ajax

Eu estou construindo o aplicativo da web usando jsp e servlet, eu envio o pedido ajax do jsp e quero retornar dois objects json do servlet. Eu tentei fazer o seguinte, mas o código não funcionou.

// in jquery eu escrevi este código

var id = $(this).attr('id'); var paramenters = {"param":id}; $.getJSON("MyServlet", paramenters, function (data1,data2){ $("h3#name").text(data1["name"]); $("span#level").text(data1["level"]); $("span#college").text(data2["college"]); $("span#department").text(data2["department"]); }); 

// no servlet eu escrevi este código

  String json1 = new Gson().toJson(object1); String json2 = new Gson().toJson(object2); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); response.getWriter().write(json1); response.getWriter().write(json2); 

alguém pode me ajudar???

Você deveria fazer assim:

Lado do servidor:

 String json1 = new Gson().toJson(object1); String json2 = new Gson().toJson(object2); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); String bothJson = "["+json1+","+json2+"]"; //Put both objects in an array of 2 elements response.getWriter().write(bothJson); 

Lado do cliente:

 $.getJSON("MyServlet", paramenters, function (data){ var data1=data[0], data2=data[1]; //We get both data1 and data2 from the array $("h3#name").text(data1["name"]); $("span#level").text(data1["level"]); $("span#college").text(data2["college"]); $("span#department").text(data2["department"]); }); 

Espero que isto ajude. Felicidades

Envolva-os no array JSON:

 [ {..}, {..}, {..}] 

ou, envolva-os em outro object:

 { "result1":{..}, "result2":{..} } 

Você poderia retornar um array JSON com os dois objects como elementos do array. Peça ao seu servlet para retornar JSON que tenha uma estrutura como esta:

 [{"name": "object1"}, {"name": "object2"}] 

Então o seu código javascript pode ser algo assim:

 $.getJSON("MyServlet", paramenters, function (data){ var data1 = data[0]; var data2 = data[1]; $("h3#name").text(data1["name"]); $("span#level").text(data1["level"]); $("span#college").text(data2["college"]); $("span#department").text(data2["department"]); }); 

você vai precisar colocar ambos em uma única cadeia json como assim

 response.getWriter().write("["); response.getWriter().write(json1); response.getWriter().write(","); response.getWriter().write(json2); response.getWriter().write("]"); 

isso os coloca em um array json

você também pode colocá-los em um object json

 response.getWriter().write("{\"object1\":"); response.getWriter().write(json1); response.getWriter().write(",\"object2\":"); response.getWriter().write(json2); response.getWriter().write("}"); 

A resposta do @Edgar funciona para mim. Mas acho que devemos evitar formar o array sozinhos, então sugiro usar uma lista. Os códigos serão algo assim:

 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ... resp.setContentType("application/json"); resp.setCharacterEncoding("utf-8"); ArrayList obj_arr = new ArrayList(); obj_arr.add(obj1); obj_arr.add(obj2); Gson gson = new Gson(); String tmp = gson.toJson(obj_arr); resp.getWriter().write(tmp); } 

E no front end, para os dados que obtemos, podemos usar data[0] para obj1 e data[1] para recuperar obj2 . Os códigos serão algo assim (estou usando ajax aqui):

 $('#facts_form').submit(function (e) { e.preventDefault(); var data = new FormData(this); var url = 'import'; $.ajax({ url: url, type: "POST", data: data, processData: false, contentType: false, async: false, cache: false, success: function (data) { for (var i = 1; i < data.length; i++){ //do whatever } }, error: function (xhr, status, error) { alert(status + "\n" + error); } }); });