Десериализация, кажется, не уважает @JsonIgnore - PullRequest
0 голосов
/ 28 сентября 2018

Версия Джексона: 2.8

Фрагмент класса:

import com.fasterxml.jackson.annotation.JsonIgnore;

@Builder
@Data
public class DifficultType implements Comparable<DifficultType> {
    @Builder.Default
    private String type = "";
    ...
    @Builder.Default
    @JsonIgnore
    private MethodCallExpr astNode = null;
}

MyObjectType класс имеет List<DifficultType>, а List<MyObjectType> сериализуется / десериализуется.

Сериализация этого объекта работает нормально, но при попытке десериализации я получаю следующее исключение:

    Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "asParentNodeOf": com.github.javaparser.ast.Node#setAsParentNodeOf(1 params) vs com.github.javaparser.ast.Node#setAsParentNodeOf(1 params)
 at [Source: ./ObjectList.json; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:305)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:268)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:443)
    at com.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator.construct(PropertyBasedCreator.java:89)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:565)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:293)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:443)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:206)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:26)
    at com.fasterxml.jackson.databind.DeserializationContext.handlePrimaryContextualization(DeserializationContext.java:650)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:490)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:293)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:443)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:206)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:26)
    at com.fasterxml.jackson.databind.DeserializationContext.handleSecondaryContextualization(DeserializationContext.java:681)
    at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:481)
    at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3915)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3810)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2775)
    at com.amazonaws.services.guru.ast.MissingApiDetector.main(MissingApiDetector.java:62)
Caused by: java.lang.IllegalArgumentException: Conflicting setter definitions for property "asParentNodeOf": com.github.javaparser.ast.Node#setAsParentNodeOf(1 params) vs com.github.javaparser.ast.Node#setAsParentNodeOf(1 params)
    at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getSetter(POJOPropertyBuilder.java:323)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.filterBeanProps(BeanDeserializerFactory.java:610)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.addBeanProps(BeanDeserializerFactory.java:500)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:230)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:145)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:403)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
    ... 25 more

Код сериализации:

 ObjectMapper mapper = new ObjectMapper();
 String jsonDataObject = mapper.writeValueAsString(myObjectList);                                                                                                                                                                                                              
 ObjectWriter writer = mapper.writer(new DefaultPrettyPrinter());                                                                                                                                                                                                                   
 writer.writeValue(new File("./ObjectList.json"), myObjectList);                                                                                                                                                                                             

Код десериализации:

final List<MyObjectType> myObjectList =  mapper.readValue(new File("./ObjectList.json"), new TypeReference<List<MyObjectType>>(){});

Сериализация работает нормально, а ObjectList.json выглядит хорошо.Когда я пытаюсь прочитать этот файл и выполнить десериализацию, я получаю исключение выше.

По какой-то причине поле com.github.javaparser.ast.expr.MethodCallExpr здесь, похоже, не игнорируется.Помогите!

...