Как обработать NumberFormatException в Gson при десериализации JSON-ответа

Я читаю JSON-ответ с помощью Gson, который иногда возвращает NumberFormatException, потому что ожидаемое значение int установлено в пустую строку. Теперь я задаюсь вопросом, как лучше всего обрабатывать такого рода исключения. Если значение является пустой строкой, то десериализация должна быть 0.

Ожидаемый ответ JSON:

{
   "name" : "Test1",
   "runtime" : 90
}

Но иногда во время выполнения получается пустая строка:

{
   "name" : "Test2",
   "runtime" : ""
}

Класс java выглядит так:

public class Foo
{
    private String name;
    private int runtime;
}

А десериализация так:

String input = "{\n" +
               "   \"name\" : \"Test\",\n" +
               "   \"runtime\" : \"\"\n" +
               "}";

Gson gson = new Gson();
Foo foo = gson.fromJson(input, Foo.class);

Что приводит к com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String, потому что вместо значения int возвращается пустая строка.

Есть ли способ сказать Gson: "если вы десериализуете поле runtime типа Foo и возникает NumberFormatException, просто верните значение по умолчанию 0"?

Моим обходным решением является использование String в качестве Type поля runtime вместо int, но, возможно, есть лучший способ обработки таких ошибок.

45
задан Soundlink 14 January 2012 в 19:31
поделиться