我正在使用Retrofit库进行REST调用。我所做的大部分工作都非常顺利,但是由于某些原因,我在将JSON时间戳字符串转换为java.util.Date
对象时遇到了问题。即将出现的JSON如下所示。
{
"date": "2013-07-16",
"created_at": "2013-07-16T22:52:36Z",
}
如何告诉Retrofit或Gson将这些字符串转换为java.util.Date objects
发布于 2014-05-24 18:24:15
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
.create();
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_BASE_URL)
.setConverter(new GsonConverter.create(gson))
.build();
或者Kotlin的等价物:
val gson = GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create()
RestAdapter restAdapter = Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
.create(T::class.java)
您可以将自定义的Gson解析器设置为改进。更多信息请点击这里:Retrofit Website
看看Ondreju的回应,看看如何在retrofit 2中实现这一点。
发布于 2016-01-25 08:39:39
@gderaco的答案更新为retrofit 2.0:
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
.create();
Retrofit retrofitAdapter = new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
发布于 2014-07-05 17:22:13
下面是我是如何做到的:
创建扩展Date的DateTime类,然后编写自定义的反序列化程序:
public class DateTime extends java.util.Date {
public DateTime(long readLong) {
super(readLong);
}
public DateTime(Date date) {
super(date.getTime());
}
}
现在对于反序列化部分,我们注册了Date和DateTime转换器:
public static Gson gsonWithDate(){
final GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
final DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
return df.parse(json.getAsString());
} catch (final java.text.ParseException e) {
e.printStackTrace();
return null;
}
}
});
builder.registerTypeAdapter(DateTime.class, new JsonDeserializer<DateTime>() {
final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public DateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
return new DateTime(df.parse(json.getAsString()));
} catch (final java.text.ParseException e) {
e.printStackTrace();
return null;
}
}
});
return builder.create();
}
在创建RestAdapter时,请执行以下操作:
new RestAdapter.Builder().setConverter(gsonWithDate());
你的Foo应该是这样的:
class Foo {
Date date;
DateTime created_at;
}
https://stackoverflow.com/questions/18473011
复制相似问题