Я использую Джексона для десериализации JSON этой формы:
{
"foo" : { "bar" : "baz" }
}
Код Джексона может выглядеть следующим образом:
@JsonCreator
public class MyProxy {
@JsonProperty("foo") final FooProxy foo;
}
public class FooProxy {
@JsonProperty("bar") final String bar;
}
Представьте, что потребитель этого API создает недопустимый JSON, например:
{
"foo" : { "bar" : 1 }
}
Однако в этом случае я получаю MismatchedInputException
, и ошибка выглядит так:
Невозможно создать экземпляр MyProxy
(хотя бы один Создатель
существует): нет конструктора int / Int-аргумента / метода фабрики для десериализации
от числового значения (1)
Когда я проверяю исключение MismatchedInputException и вызываю ex.getPathReference()
, я получаю:
FooProxy [ "бар"] -> java.lang.Object [0]
Я хотел бы иметь возможность возвращать путь к сломанному значению пользователю без какой-либо ссылки на базовые классы Java.
"foo.bar must be an Object."
Как я могу вернуть сообщение об ошибке с путем JSON и удалить любую ссылку на реализацию Java?