我正在尝试与我们使用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中放入响应主体?
答案 0 :(得分:3)
您可以通过两种方式实现:
使用JSON对象
public static Object doThis(Request request, Response response) {
response.type("application/json");
JSONObject jo = new JSONObject();
jo.put("data", "someData");
return jo;
}
使用格式为JSON的字符串
public static Object doThis(Request request, Response response) {
response.type("application/json");
return "{\"data\":\"someData\"}";
}
第一个是更好的IMO,因为你可以用更方便的方式修改JSON对象(但你必须import org.json.JSONObject
)。
然后,在客户端,您应该将数据视为JSON数据类型。希望它有所帮助。