Servlet响应JSON的ArrayList

时间:2015-06-18 17:12:33

标签: java json servlets response

我正在尝试返回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;
        }
    });

1 个答案:

答案 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();
    }
    ...
}