Может ли Гсон вернуть целевое поле, которое вызывает исключение при десериализации? - PullRequest
0 голосов
/ 21 мая 2018

Я использую Gson для (де) сериализации между строкой Json и Java Object , это удобно, но, когда строка содержит недопустимое значение,gson возвращает только исключение и указывает тип исключения.

Например, у меня есть какой-то класс, например:

public class Employee {
    public String name;
    public Integer age;
}

Если я попытаюсь десериализовать так:

try {
    String data = "{\"name\":\"Alan\",\"age\":\"twenty-eight\"}";
    Employee employee = gson.fromJson(data, Employee.class);
} catch (Exception e) {
    logger.warn(e);
}

Он выводит

java.lang.NumberFormatException: For input string: "a"

Есть ли способ узнать недопустимое поле (в данном случае " age ")?Я сослался на вопрос , но в данном случае он не подходит.

1 Ответ

0 голосов
/ 22 мая 2018

Боюсь, вы не можете сделать это с Gson 2.8.4.Если вы проверите трассировку стека, вы увидите:

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: For input string: "twenty-eight"
    at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:228)
    at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:218)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
    at com.google.gson.Gson.fromJson(Gson.java:922)
    at com.google.gson.Gson.fromJson(Gson.java:887)
    at com.google.gson.Gson.fromJson(Gson.java:836)
    at com.google.gson.Gson.fromJson(Gson.java:808)

Ни ReflectiveTypeAdapterFactory.java:131, ни ReflectiveTypeAdapterFactory.java:222 не распространяют поля, с которыми они работают, к выданным исключениям.Это похоже на проблему и кажется достойным подать отчет об ошибке в Gson.

...