首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android Retrofit中忽略JSON元素

如何在Android Retrofit中忽略JSON元素
EN

Stack Overflow用户
提问于 2015-08-10 22:29:01
回答 4查看 25.7K关注 0票数 22

我正在开发一个Android应用程序,这是发送一个JSON使用Android Retrofit (它转换一个JSON中的POJO类)。它工作得很好,但在发送JSON时需要忽略POJO类中的一个元素。

有人知道Android Retrofit注释吗?

示例

POJO类:

代码语言:javascript
复制
public class sendingPojo
{
   long id;
   String text1;
   String text2;//--> I want to ignore that in the JSON

   getId(){return id;}
   setId(long id){
     this.id = id;
   }

   getText1(){return text1;}
   setText1(String text1){
     this.text1 = text1;
   }

   getText2(){return text2;}
   setText2(String text2){
     this.text2 = text2;
   }


}

接口发送器ApiClass

代码语言:javascript
复制
 public interface SvcApi {

 @POST(SENDINGPOJO_SVC_PATH)
 public sendingPojo addsendingPojo(@Body sendingPojo sp);

}

你知道如何忽略text2吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-06 08:32:33

如果您不想使用new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(),我找到了另一个解决方案。

只是将transient包含在我需要忽略的变量中。

所以,POJO类终于:

代码语言:javascript
复制
public class sendingPojo {
    long id;
    String text1;
    transient String text2;//--> I want to ignore that in the JSON

    getId() {
        return id;
    }

    setId(long id) {
        this.id = id;
    }

    getText1() {
        return text1;
    }

    setText1(String text1) {
        this.text1 = text1;
    }

    getText2() {
        return text2;
    }

    setText2(String text2) {
        this.text2 = text2;
    }
}

我希望它能帮上忙

票数 24
EN

Stack Overflow用户

发布于 2015-08-11 02:28:56

使用@Expose注释标记所需的字段,例如:

代码语言:javascript
复制
@Expose private String id;

省略任何不想序列化的字段。然后用这种方式创建你的Gson对象:

代码语言:javascript
复制
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
票数 17
EN

Stack Overflow用户

发布于 2016-12-27 05:58:55

您可以通过将GSONBuilder中的GSON对象添加到您的ConverterFactory中来配置Retrofit,请参见下面的示例:

代码语言:javascript
复制
private static UsuarioService getUsuarioService(String url) {
    return new Retrofit.Builder().client(getClient()).baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create(getGson())).build()
            .create(UsuarioService.class);
}

private static OkHttpClient getClient() {
    return new OkHttpClient.Builder().connectTimeout(5, MINUTES).readTimeout(5, MINUTES)
            .build();
}

private static Gson getGson() {
    return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
}

要忽略field元素,只需向您的属性添加@Expose( serialize = false,serialize= false)或none,对于(反)序列化field元素,您可以向属性添加带有空值的@Expose()注释。

代码语言:javascript
复制
@Entity(indexes = {
        @Index(value = "id DESC", unique = true)
})
public class Usuario {

    @Id(autoincrement = true)
    @Expose(deserialize = false, serialize = false) 
    private Long pkey; // <- Ignored in JSON
    private Long id; // <- Ignored in JSON, no @Expose annotation
    @Index(unique = true)
    @Expose
    private String guid; // <- Only this field will be shown in JSON.
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31922250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档