что не так с моей аннотацией @JsonCreator и MixIn? - PullRequest
5 голосов
/ 16 сентября 2011

В настоящее время я использую Jackson 1.7, пытаясь десериализовать объект из сторонней библиотеки.

Итак, я настроил свой ObjectMapper для использования моего класса mixIn следующим образом:

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    mapper.getDeserializationConfig().addMixInAnnotations(com.vividsolutions.jts.geom.Point.class, MixIn.class);

И мой класс MixIn помечен @ JsonCreator и логикой для создания там объекта Point

public class MixIn {
private static final GeometryFactory geometryFactory = GeometryFactoryFactory.getGeometryFactory();

@JsonCreator
public static Point createPoint(@JsonProperty("x")double x, @JsonProperty("y")double y) {
    return geometryFactory.createPoint(new Coordinate(x, y));
}}

Но я получаю исключение

No suitable constructor found for type [simple type, class com.vividsolutions.jts.geom.Point]: can not instantiate from JSON object (need to add/enable type information?)

Отладка показывает, что мой класс MixIn никогда не вызывается, я подумал, что это должен быть конкретный класс, но у него был тот же результат.

Что я делаю не так? Что не так с моей конфигурацией?

Спасибо

Ответы [ 2 ]

7 голосов
/ 16 сентября 2011

Проблема заключается в предположении, что дополнения будут использоваться для чего-либо, кроме добавления аннотаций.Таким образом, в вашем случае будет добавлена ​​аннотация для createPoint (), но если целевой класс не имеет соответствующего фабричного метода (для добавления аннотаций), это не будет иметь никакого эффекта.В частности, встраиваемые модули не могут использоваться для внедрения статических фабричных методов;они могут использоваться только для связи аннотаций с существующими классами.

0 голосов
/ 25 мая 2015

Попробуйте использовать @JsonIgnoreProperties({"isMilestoneView", "milestoneId"}) Аннотация уровня класса

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