关于android:如何忽略用于改造的模型中的一些变量

How to ignore some variables in models using for retrofit

我正在使用改型向我的服务器发送和接收请求。

我有一个像下面这样的模型,我必须将它发送到我的服务器,但是这个模型中的一些变量不能发送到服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class SelectedListModel implements Serializable {

  @SerializedName("p_id")
  @Expose
  private Long pId;

  @SerializedName("p_qty")
  @Expose
  private Double pQty;

  @Expose(serialize = false , deserialize = false)
  private String pName; //Have not to send to server

  @Expose(serialize = false , deserialize = false)
  private String pPrice; //Have not to send to server

  @Expose(serialize = false , deserialize = false)
  private String pImageUrl; //Have not to send to server
}

正因为如此,我从服务器得到了400条响应。我使用@Expose(serialize = false, deserialize = false)来忽略不需要发送到服务器的变量。但它不起作用。是否有任何方法可以这样做,或者我必须为我的服务器创建另一个模型?


使用transient

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class SelectedListModel implements Serializable {

  @SerializedName("p_id")
  @Expose
  private Long pId;

  @SerializedName("p_qty")
  @Expose
  private Double pQty;

  //@Expose(serialize = false , deserialize = false)
  private transient String pName; //Have not to send to server

  //@Expose(serialize = false , deserialize = false)
  private transient String pPrice; //Have not to send to server

  //@Expose(serialize = false , deserialize = false)
  private transient String pImageUrl; //Have not to send to server
}

不需要在需要排除的字段中使用@Expose(serialize = false , deserialize = false)

读Java为什么有瞬态字段?为什么在Java中使用"瞬态"关键字?了解更多详细信息。


像这样更改您的改装适配器代码(我希望您使用的是Revfit2)

1
2
3
4
5
6
7
8
Gson gson = new GsonBuilder()
     .excludeFieldsWithoutExposeAnnotation()
     .create();

Retrofit retrofit = new Retrofit.Builder()  
     .baseUrl(BASE_URL)
     .addConverterFactory(GsonConverterFactory.create(gson))
     .build();