GSON抛出异常解析空Date字段

Bla*_*ack 12 java json gson

我正在使用GSON来反序列化一些JSON.JSON是:

{
    "employee_id": 297,
    "surname": "Maynard",
    "givenname": "Ron",
    "lastlogin": "",
Run Code Online (Sandbox Code Playgroud)

...

Employee对象有一个Date字段lastlogin:

public class Employee {
private Integer employee_id;

private String surname;

private String givenname;

private Date lastlogin;
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当未填充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)
Run Code Online (Sandbox Code Playgroud)

通常的方法是什么?

Hau*_*idt 36

如果你不能控制输入(即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();
Run Code Online (Sandbox Code Playgroud)

请参阅https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserializ