/** * Initializes a mapper in a thread-safe way. * * @param typeProperty The name of the property specifying the object type. * @return The initialized mapper. */ private static ObjectMapper initMapper(String typeProperty) { synchronized (mappers) { ObjectMapper mapper = mappers.get(typeProperty); if (mapper == null) { mapper = new ObjectMapper(); TypeResolverBuilder<?> typer = new CWTypeResolverBuilder(); typer = typer.init(JsonTypeInfo.Id.CUSTOM, new CWTypedIdResolver()); typer = typer.inclusion(JsonTypeInfo.As.PROPERTY); typer = typer.typeProperty(typeProperty); mapper.setDefaultTyping(typer); mappers.put(typeProperty, mapper); } return mapper; } }
@Override public TypeDeserializer buildTypeDeserializer(DeserializationConfig config, JavaType baseType, Collection<NamedType> subtypes) { return noTypeInfo(baseType) ? null : new AsPropertyTypeDeserializer(baseType, _customIdResolver, _typeProperty, _typeIdVisible, baseType); }
@Override public TypeSerializer buildTypeSerializer(SerializationConfig config, JavaType baseType, Collection<NamedType> subtypes) { return noTypeInfo(baseType) ? null : new AsPropertyTypeSerializerEx(_customIdResolver, null, _typeProperty); }