box-java-sdk icon indicating copy to clipboard operation
box-java-sdk copied to clipboard

Override toString() in Info classes to encode them back to JSON

Open gcurtis opened this issue 11 years ago • 2 comments

Calling toString() on an Info object should return the full JSON representation of the object, including any changes made locally.

This feature makes it easier for applications to cache and store data returned from the API.

gcurtis avatar Jan 15 '15 22:01 gcurtis

Appears to have been added by PR#461

PreciselyAlyss avatar May 21 '19 15:05 PreciselyAlyss

I do not think that toString method should return Json object representation with all the changes. This method is used mostly for debugging/logging so it should be fast . What is required here does not look like it fits into toString specification.

All Info objects have to methods:

  • com.box.sdk.BoxJSONObject#getPendingChanges - that returns String representation of the Json with all the pending changes
  • com.box.sdk.BoxJSONObject#getPendingChangesAsJsonObject - that returns JsonObject with all the pending changes However those will return null if there are no pending changes. If we create a new method to return Json representation of current state of the Info object (as String or JsonObject) to cache it what would be the use case? Some application gets the response from SDK, modifies it, gets Json and cache it but what then? If it would get the object from cache and create the Info object from it the information on pending changes are lost. The best approach is to use com.box.sdk.BoxJSONObject#getJson which is exposed to all Info objects. If you use this Json representation to cache response and the use it to create Info object you are not loosing any information. But you have any pending changes you have to sent them via SDK.

antusus avatar Jan 25 '22 10:01 antusus