GSON выдает исключение при разборе пустого поля даты - PullRequest
11 голосов
/ 08 февраля 2012

Я использую GSON для десериализации некоторого JSON.JSON:

{
    "employee_id": 297,
    "surname": "Maynard",
    "givenname": "Ron",
    "lastlogin": "",

...

Объект Employee имеет поле Date 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)

Как обычно это обходится?

Ответы [ 2 ]

35 голосов
/ 08 февраля 2012

Если вы не можете управлять вводом (т. Е. Частью, генерирующей 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();

См. https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserializ

2 голосов
/ 08 февраля 2012

Это потому, что это пустая строка, с которой Date не знает, как обращаться. Если вы посмотрите на GSON Code , это показывает, что он просто вслепую анализирует строку, используя DateFormat.parse, который плохо обрабатывает кавычки.

Вы пытались использовать null ? Попробуйте использовать нуль, если он пуст. Из кода для GSON Code для DateTypeAdapter он отлично обрабатывает объекты JSONNull, просто пропускает их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...