2017-08-29 83 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();