如何检查来自RestTemplate的响应以获取JSON字符串的错误和成功案例?

时间:2014-01-24 04:29:42

标签: java json resttemplate

我正在开发一个项目,我正在对我的服务器进行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字符串中的正确数据。

解决此问题的最简单有效的方法是什么?

2 个答案:

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

希望这有帮助。