2015-06-05 107 views
1

我一直在嘗試Retrofit,我真的很簡單。改裝:只更新特定字段

但是我有一個otimization關注。 我爲我的後端使用Parse,它有一個純粹的Rest API。

當我想要更新一個對象時,我使用了一個PUT HTTP Request,並只傳遞了我想要更新的特定值body

但是,使用Retrofit時,我總是必須在使用@Body批註傳遞它時序列化整個對象。如果我有一個非常大的對象,這是非常不利的。

我看到的所有解決方案都是使用註解來通知轉換器哪些字段被暴露。但是,這會影響所有請求,並且如果我具有更新不同字段的更新方法,則不起作用。

我想我有兩個選擇:

  1. 傳遞我想更新爲Form參數和使用 的@URLEncoded標註的參數。然而,這不是真的RESTful ,我不認爲Parse支持它。
  2. 創建註釋以通知哪些字段應添加到JSONbody中。爲此,如何訪問Converter中的方法註釋,以選擇要序列化的字段?
+0

你可以看看這個問題:http://stackoverflow.com/questions/18491733/gson-serialize-field-only -if-not-null-or-not-empty和相應的答案。這會有幫助嗎? –

+0

類別。但是在Converter裏面,我現在該怎麼做,現在用戶想要序列化哪些字段呢?我可以在特定的服務方法中創建註釋,但在GsonConverter內部,我怎樣才能訪問這個註解? – ffleandro

回答

0

Retrofit默認使用Gson。 Gson默認排除空值。所以它不應該是一個問題(除非你在你的對象中使用原始類型)

+0

這不是我想要做的。我希望能夠從正文請求中選擇要發送的對象中的哪些字段。我所看到的所有解決方案都是通過註釋來實現的,但是這會影響具有相同對象的所有請求。 – ffleandro

+0

如果你創建一個新的對象,並只設置你感興趣的字段,所有其他字段將爲null,而不是由Gson序列化,並且不會在本體中發送 – andrei

+0

@ffleandro我試着用PUT和PATCH(它我用於更新),並在查看請求在charles代理後,我可以確認只有初始化字段正在發送 – andrei