改造 null\empty 日期处理
Retrofit null\empty Date handling
我的 POJO 中有日期字段,我使用改造来解析 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)
有什么聪明的方法可以通过改造来处理这个异常吗?
您应该为 Date
class
注册自定义 Deserializer
GsonBuilder gBuilder = new GsonBuilder();
gBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { .... }
Gson gSon = gBuilder.create();
调用回调时,在格式化日期之前检查 JsonElement
的内容,并采取相应措施。
不要忘记用您创建的 Gson 实例调用 addConverterFactory
。例如
.addConverterFactory(GsonConverterFactory.create(gSon))
当你添加 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
我的 POJO 中有日期字段,我使用改造来解析 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)
有什么聪明的方法可以通过改造来处理这个异常吗?
您应该为 Date
class
Deserializer
GsonBuilder gBuilder = new GsonBuilder();
gBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { .... }
Gson gSon = gBuilder.create();
调用回调时,在格式化日期之前检查 JsonElement
的内容,并采取相应措施。
不要忘记用您创建的 Gson 实例调用 addConverterFactory
。例如
.addConverterFactory(GsonConverterFactory.create(gSon))
当你添加 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