2017-08-29 54 views
1

我正在使用改装向我的服务器发送和接收请求。如何忽略模型中的某些变量用于改进

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

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)为了忽略不发送到服务器的变量。 但它不起作用。 有没有办法做到这一点,或者我必须为我的服务器创建另一个模型?

回答

1

使用transient keywork为

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?的更多细节。

0

改变你的改造适配器这样的代码(我希望你用retrofit2)

Gson gson = new GsonBuilder() 
    .excludeFieldsWithoutExposeAnnotation() 
    .create(); 

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