我正在尝试让客户端(Android)与使用sparkjava的服务器对话,但遇到了当客户端尝试解析响应正文时的问题response.data
使用 Volley 时,会发现响应主体为空。客户端正在发送 JsonRequestObject
,如果响应正文为空,则会抛出 JSONException。
这是我们的 SparkJava Controller :
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 "";
}
我在 header 和正文中设置相同的数据,但是当我查看客户端收到的响应时,数据仅在 header 中,而不在正文中。所以我认为 Spark 的 response.body() 方法并没有真正将数据放入发回的响应中。 Sparkjava中response.body的表示方式与volley的查看方式不同吗?或者还有其他方法将数据从 Spark 放入响应正文中吗?
最佳答案
您可以通过两种方式做到这一点:
使用 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\"}"; }
第一个在我看来更好,因为您可以以更方便的方式修改 JSON 对象(但您必须导入 org.json.JSONObject
)。
然后,在客户端,您应该将数据视为 JSON 数据类型。希望对您有所帮助。
关于java - Sparkjava无法将数据放入响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660372/