box-java-sdk
box-java-sdk copied to clipboard
Override toString() in Info classes to encode them back to JSON
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.
Appears to have been added by PR#461
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
nullif 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.