Я читаю ответ JSON с Gson, который возвращает Somtimes NumberFormatException
, поскольку ожидаемый int
значение устанавливается равным пустой строке. Теперь мне интересно, как лучше всего справиться с таким исключением. Если значение является пустой строкой, то десериализации должен быть 0.Как обрабатывать NumberFormatException с Gson в десериализации JSON ответ
Ожидаемый ответ 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
в качестве типа поля runtime
вместо int
, но, возможно, существует лучший способ обработки таких ошибок.
Это точно не отвечает на ваш вопрос, но, может быть, вам следует просто опустить все поле «runtime» из JSON? –
Также, что происходит, когда вы меняете поле из int в Integer? –
JSON - это ответ веб-сервиса, который я не могу контролировать, но меня интересует среда выполнения. Изменение поля на Integer не имеет значения. – Soundlink