![](/img/trans.png)
[英]Parsing json with retrofit2 gson-converter, with fields of another name
[英]Add two more values in POJO based on a value from the API while setting it - Retrofit2 & Gson converter
首先,我對此表示歉意。 但是我只是不確定要搜索什么。
現在,我在POJO模型中設置了Retrofit2,一切正常。 但是某些節點的API會返回日期的Unix時間戳格式。 我希望在設置POJO時將其轉換並設置為兩個值(星期幾和人類可讀的日期)。
這有可能嗎?如何?
POJO類似於:
public class Pojo {
@SerializedName("id")
@Expose
private int id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("date")
@Expose
private int unixDate;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getUnixDate() {
return unixDate;
}
public void setUnixDate(int unixDate) {
// Tried the conversion and storing here but it of course won't work
this.unixDate = unixDate;
}
}
有沒有一種方法可以指示Retrofit2或Gson轉換器根據Unix時間戳將兩個以上的值(星期幾和日期)添加到POJO,但是將其他所有內容保留為默認值。
編輯:只是為了清理。 我知道如何使用ThreeTen Android Backport並將unix轉換為日期和日期。 我只需要一種方法來指示Gson轉換器或Retrofit2使用該邏輯。
干杯
在您的POJO中添加新字段。 不要將它們注釋為暴露的。 進行改造調用時,在onResponse方法中,將值分配給自定義字段。 像這樣:
call.enqueue(new Callback<List<Pojo>>() {
public void onResponse(List<Pojo> list) {
for (Pojo pojo : list) {
pojo.setDayOfWeek();
pojo.setDate();
}
}
}
我解釋了您的問題,即在GSON中為日期解析創建自定義邏輯時遇到了問題。 問題在於該方法不指示GSON,而是使用它自己的反序列化,因此它使用該系統設置。 只需創建您自己的類並實現JsonDeserializer接口即可。
public class DiyDateParser implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
Date date = new Date((long)timeStamp*1000);
//Your implementation for date parsing
try {
return formatter.parse(date);
} catch (ParseException e) {
System.err.println("Failed to parse Date due to:", e);
return null;
}
}
}
之后,您可以像這樣使用它:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DiyDateParser());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.