我有一个Android应用程序,它使用retrofit2和Jackson来序列化一组类,以便通过REST api将它们发送到mysql数据库。
所有类字段都是序列化的,除了类型为Date的字段。在POST到其余API之前,它们具有正常值,但它们作为空值到达REST接收函数。
我已经浏览了SO,尝试使用下面的改造客户端初始化,尽可能多地建议切换到GSON:
Gson gson = new GsonBuilder()
.setDateFormat(Utils.DATABASE_DATE_FORMAT)
.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context)
throws JsonParseException {
return new Date();
}
}).registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
@Override
public JsonElement serialize(Date src, Type typeOfSrc,
JsonSerializationContext context) {
Gson ggson = new GsonBuilder().setDateFormat(
Utils.DATABASE_DATE_FORMAT).create();
return new JsonPrimitive(ggson.toJson(src));
}
}).create();
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(getUnsafeOkHttpClient(token))
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
断开序列化程序功能内部显示Dates确实已转换为适当的String格式。但是,它们作为空值到达REST接收器。
有什么想法吗?
答案 0 :(得分:0)
我之前也遇到过类似的问题!我最终使用@GET调用返回日期的其余服务器。我复制了格式并在我的机器人上从json打印出来。我发现我不需要毫秒。 .setDateFormat(“yyyy-MM-dd'T'HH:mm:ssZ”)&lt; - 我删除了Z.也许对于你的情况,你需要确保它接受/期望正确的格式。我将此链接用于格式http://www.sdfonlinetester.info/