我正在尝试返回JSON的ArrayList作为对HTTP GET请求的响应。
我正在使用JSONP作为JSON部分。
这是我的servlet:
package servlet;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.json.*;
@WebServlet("/Class")
public class Class extends HttpServlet {
private static final long serialVersionUID = 1L;
public Class() {
super();
ArrayList<JsonObject> array = new ArrayList<JsonObject>();
JsonObject tankJson = Json.createObjectBuilder()
.add("name", "Tank")
.add("spell", Json.createArrayBuilder()
.add(Json.createObjectBuilder()
.add("name", "Gun")
.add("description", "Slow."))
.add(Json.createObjectBuilder()
.add("name", "Shield")
.add("description", "Can send back bullets.")))
.build();
JsonObject infantryJson = Json.createObjectBuilder()
.add("name", "Infantry")
.add("spell", Json.createArrayBuilder()
.add(Json.createObjectBuilder()
.add("name", "Rifle")
.add("description", "Fast, Spread."))
.add(Json.createObjectBuilder()
.add("name", "Teleport")
.add("description", "Can jump instantly to a certain area.")))
.build();
JsonObject sniperJson = Json.createObjectBuilder()
.add("name", "Sniper")
.add("spell", Json.createArrayBuilder()
.add(Json.createObjectBuilder()
.add("name", "Rifle")
.add("description", "Slow, can charge to increase damage."))
.add(Json.createObjectBuilder()
.add("name", "Mine")
.add("description", "Can drop mines that explode at enemies contact.")))
.build();
array.add(tankJson);
array.add(infantryJson);
array.add(sniperJson);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
response.getWriter().write(array); // I don't know how to load the response
}
}
我试过了:
response.getWriter().write(array)
response.getWriter().write(array.toString());
虽然我猜这不算数,因为它是一个字符串,而不是我发送的数组。
在这种情况下,我没有在互联网上找到很多帮助。
我希望能够在JS中得到如下响应:(如果可能的话)
var classes = null;
$.ajax({
url : 'http://localhost:8080/VSV/class',
type : 'GET',
success : function(data, status) {
classes = data;
}
});
答案 0 :(得分:1)
你应该使用JsonArray。考虑下次阅读documentation。请参阅以下示例。
不要将Class
用作类名,可能会与java.lang.Class
混淆。
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private JsonArray myArray;
public MyServlet() {
super();
...
myArray=Json.createArrayBuilder()
.add(jsonObject)
.add(otherObject)
.build();
}
...
}