Sparkjava无法将数据放入响应主体

时间:2017-12-05 18:27:29

标签: java android android-volley httpresponse spark-java

我正在尝试与我们使用sparkjava的服务器进行客户端(Android)对话,但遇到的问题是,当客户端尝试使用Volley解析响应response.data的主体时,它会变得越来越多响应主体是空的。客户端正在发送JsonRequestObject,如果响应的主体为空,它将抛出JSONException。

这是我们的sparkJava控制器:

  public static String doThis(Request request, Response response) {
        response.type("application/json");

        // If the request fails validations, then return a 400
        if (request.failsValidations()) {
            response.status(HTTP_BAD_REQUEST); // 400
            response.header("Error", "Bad request");
        } else {
            response.status(HTTP_SUCCESS); // 200
            // Put the response into the data
            String responseData = "{//someJson}"
            response.header("data", responseData);
            response.body(data);
        }
        return "";
    }

我在标题和正文中设置了相同的数据,但是当我查看客户端收到的响应时,数据只在标题中,而不在正文中。所以我认为Spark的response.body()方法并没有真正将数据放入发回的响应中。 response.body在sparkjava中的表现方式与凌空如何看待它的方式不同吗?或者是否有另一种方法将数据从spark中放入响应主体?

1 个答案:

答案 0 :(得分:3)

您可以通过两种方式实现:

  1. 使用JSON对象

    public static Object doThis(Request request, Response response) {
        response.type("application/json");
    
        JSONObject jo = new JSONObject();
        jo.put("data", "someData");
        return jo;
    }
    
  2. 使用格式为JSON的字符串

    public static Object doThis(Request request, Response response) {
        response.type("application/json");
    
        return "{\"data\":\"someData\"}";
    }
    
  3. 第一个是更好的IMO,因为你可以用更方便的方式修改JSON对象(但你必须import org.json.JSONObject)。

    然后,在客户端,您应该将数据视为JSON数据类型。希望它有所帮助。