android到REST:无法序列化java Date

时间:2017-07-02 00:09:09

标签: java json rest gson retrofit2

我有一个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接收器。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我之前也遇到过类似的问题!我最终使用@GET调用返回日期的其余服务器。我复制了格式并在我的机器人上从json打印出来。我发现我不需要毫秒。 .setDateFormat(“yyyy-MM-dd'T'HH:mm:ssZ”)&lt; - 我删除了Z.也许对于你的情况,你需要确保它接受/期望正确的格式。我将此链接用于格式http://www.sdfonlinetester.info/