2015-06-18 80 views
1

我有這個json字符串來解析{"uid":8,"totalPoints":"7740"} 我已經爲此寫了下面的類。使用ObjectMapper解析Json字符串?

public class Points extends WebRequest implements IWebRequest { 

    private static final String CLASS_TAG = Points.class.getSimpleName(); 
    private WebAPIResponse mWebAPIResponse; 
    private int mUserId; 

    /** 
    * Initialize object 
    * @param urlEndPoint 
    * @param uiDelegate 
    * @param appContext 
    * @param webServiceRequestCallback 
    */ 
    public Points(String urlEndPoint, IUIDelegate uiDelegate, 
      WeakReference<Context> appContext, 
      IWebServiceRequestCallback webServiceRequestCallback) { 
     super(urlEndPoint, uiDelegate, appContext, webServiceRequestCallback); 
    } 

    @Override 
    public String parseResponse(String responseString) { 

     if (MBUtil.isEmpty(responseString)) { 
      return ""; 
     } 

     String errMsg = ""; 

     try { 

      ObjectMapper objectMapper = new ObjectMapper(); 
      objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
      objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true); 

      if (!objectMapper.canDeserialize(objectMapper.constructType(WebAPIResponse.class))) { 
       return getAppContext().getString(R.string.msg_error_in_reading_format); 
      } 

      WebAPIResponse webAPIResponse = objectMapper.readValue(responseString, WebAPIResponse.class); 
      this.mWebAPIResponse = webAPIResponse; 

      Errors errors = webAPIResponse.getErrors(); 

      if (errors != null) { 
       errMsg = errors.getMsg(); 
      } 

     } catch (Exception e) { 
      Log.e(CLASS_TAG, e.getMessage()); 
      errMsg = e.getMessage(); 
     } 
     return errMsg; 
    } 

    @Override 
    public JSONObject buildRequestBody() { 

     JSONObject jsonObject = new JSONObject(); 
     Context context = getAppContext(); 
     if(context == null) { 
      return jsonObject; 
     } 

     try { 

      // Authentication body parameters 
      JSONObject authenticationJsonObject = new JSONObject(); 
      authenticationJsonObject.put(context.getString(R.string.key_points_uid), mUserId); 
      return authenticationJsonObject; 

     } catch (Exception e) { 
      Log.e(CLASS_TAG, e.getMessage()); 
     } 
     return jsonObject; 
    } 

    public int getUserId() { 
     return mUserId; 
    } 

    public void setUserId(int mUserId) { 
     this.mUserId = mUserId; 
    } 

    public WebAPIResponse getWebAPIResponse() { 
     return mWebAPIResponse; 
    } 

    public void setWebAPIResponse(WebAPIResponse mWebAPIResponse) { 
     this.mWebAPIResponse = mWebAPIResponse; 
    } 

    public static class WebAPIResponse { 

     private Data pointsData; 
     private Errors errors; 

     public Data getPointsData() { 
      return pointsData; 
     } 

     public void setPointsData(Data pointsData) { 
      this.pointsData = pointsData; 
     } 

     public Errors getErrors() { 
      return errors; 
     } 

     public void setErrors(Errors errors) { 
      this.errors = errors; 
     } 
    } 

    public static class Data { 

     @JsonProperty("uid") 
     private int uid; 
     @JsonProperty("totalPoints") 
     private int totalPoints; 

     public int getUid() { 
      return uid; 
     } 

     public void setUid(int uid) { 
      this.uid = uid; 
     } 

     public int getTotalPoints() { 
      return totalPoints; 
     } 

     public void setTotalPoints(int totalPoints) { 
      this.totalPoints = totalPoints; 
     } 
    } 
} 

會收到在parseResponse()方法,該方法是適當的響應,

responseString = {"uid":8,"totalPoints":"7740"} 

但在相同pasreResponse()方法,一旦它到達該線

if (!objectMapper.canDeserialize(objectMapper.constructType(WebAPIResponse.class))) { 
       return getAppContext().getString(R.string.msg_error_in_reading_format); 
      } 

      WebAPIResponse webAPIResponse = objectMapper.readValue(responseString, WebAPIResponse.class); 

未響應任何的東西,無法解析字符串。請任何人檢查我的解析類是否正確,爲什麼它不解析。

+0

什麼的'Errors'類是什麼樣子?確保它可以通過ObjectMapper'可以理解的方式進行序列化。其他兩類包括上面看起來好 – blgt

回答

2

與您的responseString = {"uid":8,"totalPoints":"7740"}只能通過Data對象反序列化它。

Data data = objectMapper.readValue(responseString, Data.class); 

如果你想你的JSON字符串反序列化對象WebAPIResponse,你responseString必須是:

{"pointsData":{"uid":8,"totalPoints":"7740"}, "errors": ...} 
+0

我做到了,但仍然是同樣的問題。即使我調試它在同一行它打開DexFile.class在新標籤中顯示消息類文件編輯器「源找不到」。該怎麼做? – Vid