【问题标题】:Retrofit null\empty Date handling改造 null\empty 日期处理
【发布时间】:2016-01-25 08:02:04
【问题描述】:

我的 POJO 中有 Date 字段,我使用改造来解析 JSON。在某些情况下,此字段的返回值可以为空或 null。我得到错误:

Caused by: java.text.ParseException: Unparseable date: "" (at offset 0)
at java.text.DateFormat.parse(DateFormat.java:618)
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:105)

有什么聪明的方法可以通过改造来处理这个异常吗?

【问题讨论】:

    标签: android date exception retrofit pojo


    【解决方案1】:

    您应该为Date 类注册一个自定义Deserializer

    GsonBuilder gBuilder = new GsonBuilder();
    gBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { .... }
    Gson gSon = gBuilder.create();
    

    当回调被调用时,在格式化日期之前检查JsonElement的内容,并采取相应的行动。

    不要忘记使用您创建的 Gson 实例调用 addConverterFactory。例如

     .addConverterFactory(GsonConverterFactory.create(gSon))
    

    【讨论】:

      【解决方案2】:

      当你添加 Gson 时请使用这个:

         Gson gson = new GsonBuilder().serializeNulls().create();
      

      如果你不添加旧的改造应该是这样的:

      Gson gson = new GsonBuilder()
                  .setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'")
                  .create();
      
          RestAdapter restAdapter = new RestAdapter.Builder()
                  .setLogLevel(RestAdapter.LogLevel.FULL)
                  .setEndpoint(BASE_URL)
                  .setConverter(new GsonConverter(gson))
                  .build();
      

      请看: GSON DOCS

      而且我认为有一个问题非常相似。

      Gson ignoring map entries with value=null

      【讨论】:

        猜你喜欢
        • 2019-03-21
        • 2010-09-29
        • 2019-09-05
        • 1970-01-01
        • 2011-07-22
        • 2010-10-12
        • 2011-08-15
        • 2023-03-27
        相关资源
        最近更新 更多