我正在开发一个项目,我正在对我的服务器进行rest url调用,这会给我一个JSON字符串作为响应。如果服务有任何问题,那么它会给我以下任何一个JSON字符串作为响应 -
{"error":"no user_id passed"}
or
{"warning": "user_id not found", "user_id": some_user_id}
or
{"error": "user_id for wrong partition", "user_id": some_user_id, "partition": some_partition}
or
{"error":"no client_id passed"}
or
{"error": "missing client id", "client_id":2000}
下面是我调用的代码,如果服务端出现问题,response
变量将具有JSON字符串,但如果是成功响应,那么它将不包含任何上述JSON字符串。它将是一个有效JSON字符串,具有正确的数据但成功响应的JSON字符串与上面的错误情况JSON字符串完全不同,因此我不能为此提供相同的POJO ..
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject(url, String.class);
// check response here as it will have above error JSON String if
// something has gone wrong on the server side, and some other data if it is a success
如果响应包含任何上述JSON字符串,我需要记录错误,因为它是一个错误但如果它不包含上面的JSON字符串,那么记录为成功..
注意:如果来自服务的响应不成功,那么它将有错误和警告作为JSON字符串中的第一个键。但如果它成功,那么它将是JSON字符串中的正确数据。
解决此问题的最简单有效的方法是什么?
答案 0 :(得分:0)
如果您在成功时返回不同的响应并且不包含键“错误”,则此方法有效。
JSONObject jsonObject = new JSONObject(response);
bool isError = false;
//I checke for one error you can do same for other errors and warning as well. You can directly check this from array.
if(jsonObject.has("error"))
{
String error = jsonObject.getString("error");
if(errror == "no user_id passed")
{
isError = true;
}
}
if(!isError)
{
//continue what you were doing.
}
答案 1 :(得分:0)
您可以使用org.json库中的JSONObject“has”方法来检查json字符串中是否存在特定键。您可以使用此方法检查服务器是否返回错误并进行相应处理。
示例代码:
//Array of all errors
String[] error_list = ["no user_id passed","user_id not found","user_id for wrong partition","no client_id passed"];
public boolean isErrorResp(String json_response)
{
try
{
JSONObject json_obj = new JSONObject(json_response); //create JSONObject for your response
//check if your response has "error" key if so check if the value of error key is in the error_list array
if(json_obj.has("error")&&Arrays.asList(error_list).contains(json_obj.getString("error")))
{
return true;
}
else if(json_obj.has("warning")&&Arrays.asList(error_list).contains(json_obj.getString("warning")))
{
return true;
};
return false;
}
catch(JSONException ex)
{
//error handling for improper json string.
return false;
}
}
希望这有帮助。