我正在使用 GSON 反序列化一些 JSON。
JSON 是:
{
"employee_id": 297,
"surname": "Maynard",
"givenname": "Ron",
"lastlogin": "",
...
员工对象有一个日期字段lastlogin:
public class Employee {
private Integer employee_id;
private String surname;
private String givenname;
private Date lastlogin;
我遇到的问题是,当 Lastlogin 值未填充时,它在 JSON 中是一个空字符串,因此 GSON 解析器会抛出:
java.text.ParseException: Unparseable date: ""
at java.text.DateFormat.parse(DateFormat.java:337)
at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:79)
at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:66)
解决这个问题的通常方法是什么?
如果您无法控制输入(即 JSon 生成部分),但知道非空时的格式,那么您应该编写一个自己的反序列化器来处理空值,例如
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
@Override
public Date deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
throws JsonParseException {
try {
return df.parse(json.getAsString());
} catch (ParseException e) {
return null;
}
}
});
Gson gson = gsonBuilder.create();
See https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserialize https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserializ
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)