2015-06-05 55 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