@@ -76,6 +76,7 @@ public void setQuery(JBQuery query) {
7676 transient protected JBAcl acl ;
7777
7878 Map <String , Object > serverData ;
79+ Map <String , Object > saveData ;
7980 Map <String , JBOperator > operationQueue ;
8081
8182 public Map <String , Object > getServerData () {
@@ -144,6 +145,7 @@ public void setAcl(JBAcl acl) {
144145 public JBObject () {
145146 objectId = "" ;
146147 serverData = new HashMap <>();
148+ saveData = new HashMap <>();
147149 operationQueue = new HashMap <>();
148150 }
149151
@@ -158,6 +160,7 @@ public void put(final String key, final Object value) {
158160 lock .writeLock ().lock ();
159161 if (checkKey (key )) {
160162 serverData .put (key , value );
163+ updateSaveData (key , value );
161164 }
162165 } catch (Exception e ) {
163166 JBLogUtil .log .w ("数据处理错误" );
@@ -166,14 +169,27 @@ public void put(final String key, final Object value) {
166169 }
167170 }
168171
172+ private void updateSaveData (String key , Object value ) {
173+ if (value == null ) {
174+ saveData .remove (key );
175+ } else if (value instanceof JBFile || value instanceof JBUser || value instanceof JBObject ) {
176+ Map <String , Object > map = new HashMap <>();
177+ map .put ("__type" , value instanceof JBFile ? "File" : "Pointer" );
178+ map .put ("className" , ((JBObject )value ).getClassName ());
179+ map .put ("_id" , ((JBObject )value ).getObjectId ());
180+ saveData .put (key , map );
181+ } else {
182+ saveData .put (key , value );
183+ }
184+ }
185+
169186 private boolean checkKey (String key ) {
170187 if (JBUtils .isEmpty (key ))
171188 throw new IllegalArgumentException ("字段为空" );
172189 if (key .startsWith ("_" )) {
173190 throw new IllegalArgumentException ("字段不能以'_'开头" );
174191 }
175192 if (INVALID_KEYS .contains (key )) {
176- // JBLogUtil.log.w(key + "为不可用字段");
177193 return false ;
178194 }
179195 return true ;
@@ -334,7 +350,7 @@ private void saveObjectToJavaBaas(final boolean sync, final JBSaveCallback callb
334350 }
335351 }
336352 }
337- Map <String , Object > body = getObjectBody ();
353+ Map <String , Object > body = getObjectForSaveBody ();
338354 JBHttpClient .INSTANCE ().sendRequest (urlPath , method , jbHttpParams , body , sync , new JBObjectCallback () {
339355 @ Override
340356 public void onSuccess (JBResult result ) {
@@ -356,13 +372,13 @@ public void onFailure(JBException error) {
356372 });
357373 }
358374
359- protected Map <String , Object > getObjectBody () {
375+ protected Map <String , Object > getObjectForSaveBody () {
360376 Map <String , Object > body = new HashMap <>();
361377 if (this .acl != null ) {
362378 body .putAll (acl .getAclMap ());
363379 }
364- if (this .serverData .size () > 0 ) {
365- body .putAll (this .serverData );
380+ if (this .saveData .size () > 0 ) {
381+ body .putAll (this .saveData );
366382 }
367383 if (this .operationQueue .size () > 0 ) {
368384 body .putAll (this .operationQueue );
@@ -429,14 +445,6 @@ protected void copyFromMap(Map<String, Object> map) {
429445 }
430446 }
431447
432- public Map <String , Object > getPointer () {
433- if (JBUtils .isEmpty (className ) || JBUtils .isEmpty (objectId )) {
434- return null ;
435- }
436- return new JBPointer (className , objectId );
437- }
438-
439-
440448 @ Override
441449 public String toString () {
442450 String serverDataStr = "" ;
0 commit comments