Я в настоящее время использую Jackson 1.4.2 и делаю попытку десериализации code
значения (уникальные идентификаторы для получения информации о типе), которые передаются от нашего UI назад к контроллерам Java (Сервлеты).
Существует несколько типов (например. ABCType
, XYZType
, и т.д.), который все расширяют от AbstractType
, но каждый конкретный тип имеет статический метод фабрики, который берет в качестве единственного параметра, уникального идентификатора, и возвращает текстовый объект (имя, связанные типы, описание, допустимые акронимы, и т.д.) представленный тем идентификатором. Статический метод в каждом конкретном типе (например. XYZType
) аннотируется @JsonCreator
:
@JsonCreator
public static XYZType getInstance(String code) {
.....
}
Проблема, которую я вижу, хотя исключение, выданное картопостроителем Jackson, пытающимся десериализовывать json к тем типам:
Вызванный: org.codehaus.jackson.map. JsonMappingException: Никакой конструктор по умолчанию не найден для типа [простой тип, класс com.company.type. XYZtype]: не может инстанцировать от объекта Json.
Что я пропускаю здесь @JsonCreator
аннотация к статическим методам фабрики (или это, чтобы сделать с Jackson 1.4.2 борьбы с конкретными типами, расширяющимися от AbstractType
?)?
Проблема в том, что Джексон видит только заявленный базовый тип и не знает, где искать подтипы. Поскольку полная обработка полиморфных типов была добавлена в 1.5, что вам нужно сделать с 1.4, так это добавить фабричный метод в базовый класс и методы диспетчеризации оттуда.