Джексон не распознает аннотацию @JsonCreator - PullRequest
10 голосов
/ 25 июня 2010

В настоящее время я использую Jackson 1.4.2 и пытаюсь десериализовать значения code (уникальные идентификаторы для информации о типе), которые передаются из нашего пользовательского интерфейса обратно в контроллеры Java (сервлеты).

Существует несколько типов (например, ABCType, XYZType и т. Д.), Которые расширяются от AbstractType, но каждый конкретный тип имеет метод статической фабрики, который принимает в качестве единственного параметра уникальный идентификатор и возвращает объект типа (имя, связанные типы, описание, действительные сокращения и т. д.), представленный этим идентификатором. Статический метод в каждом конкретном типе (например, XYZType) помечается @JsonCreator:

@JsonCreator
public static XYZType getInstance(String code) {
    .....
}

Проблема, с которой я сталкиваюсь, - это исключение, выдвинутое картографом Джексона, пытающимся десериализовать json для следующих типов:

Причина: org.codehaus.jackson.map.JsonMappingException: не найден конструктор по умолчанию для типа [простой тип, класс com.company.type.XYZtype]: невозможно создать экземпляр объекта Json.

Что мне здесь не хватает в аннотации @JsonCreator к статическим фабричным методам (или это связано с тем, что Jackson 1.4.2 борется с конкретными типами, начинающимися с AbstractType?)?

Ответы [ 2 ]

14 голосов
/ 08 августа 2013

Аннотация @JsonCreator требует аннотации @JsonProperty. Эта вики-страница Джексона дает мало информации, но предлагает пример кода:

@JsonCreator
public Name(@JsonProperty("givenName") String g, @JsonProperty("familyName") String f)
{
  givenName = g;
  familyName = f;
}

Более подробное объяснение вы найдете в этом сообщении в блоге .

Ваш пример кода должен выглядеть примерно так:

@JsonCreator
public static XYZType getInstance(@JsonProperty("someCode") String code)
{
 ...
}
5 голосов
/ 29 июня 2010

Проблема в том, что Джексон видит только объявленный базовый тип и не знает, где искать подтипы. Так как полная обработка полиморфных типов была добавлена ​​в 1.5, вам нужно сделать с 1.4 добавление фабричного метода в базовый класс и методы отправки оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...