我正在使用 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
}
因此,我的服务器响应中得到400。
我使用@Expose(serialize = false, deserialize = false)
来忽略那些没有发送到服务器的变量。
但它不起作用。
有没有办法做到这一点,或者我必须为我的服务器创建另一个模型?
答案 0 :(得分: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
}
并且无需使用@Expose(serialize = false , deserialize = false)
到需要排除的字段中。
阅读Why does Java have transient fields?和Why use the `transient` keyword in java?了解详情。
答案 1 :(得分:2)
在请求api调用时,您可以使用transient
关键字忽略字段
JAVA:
transient String name;
科特琳:
@Transient
var name: String
答案 2 :(得分:0)
像这样更改您的Retrofit适配器代码(我希望您使用retrofit2)
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();