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

Ehs*_*san 5 android gson retrofit2

我正在使用Retrofit向我的服务器发送和接收请求.

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

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
}
Run Code Online (Sandbox Code Playgroud)

因此,我从服务器得到的回复是400.我用它@Expose(serialize = false, deserialize = false)来忽略那些没有发送到服务器的变量.但它不起作用.有没有办法做到这一点,或者我必须为我的服务器创建另一个模型?

Ami*_*aza 7

请求api调用时可以使用transient关键字忽略字段

爪哇:

transient String name;
Run Code Online (Sandbox Code Playgroud)

科特林:

@Transient
var name: String
Run Code Online (Sandbox Code Playgroud)


Pan*_*mar 6

使用transient关键工作

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
}
Run Code Online (Sandbox Code Playgroud)

并且无需使用@Expose(serialize = false , deserialize = false),进入那些需要被排除的领域.


阅读为什么Java有瞬态字段?为什么要使用Java中的`transient`关键字?更多细节.