public static MapSerializer construct(String[] ignoredList, JavaType mapType, boolean staticValueType, TypeSerializer vts, BeanProperty property, JsonSerializer<Object> keySerializer, JsonSerializer<Object> valueSerializer) { HashSet<String> ignoredEntries = toSet(ignoredList); JavaType keyType, valueType; if (mapType == null) { keyType = valueType = UNSPECIFIED_TYPE; } else { keyType = mapType.getKeyType(); valueType = mapType.getContentType(); } // If value type is final, it's same as forcing static value typing: if (!staticValueType) { staticValueType = (valueType != null && valueType.isFinal()); } return new MapSerializer(ignoredEntries, keyType, valueType, staticValueType, vts, keySerializer, valueSerializer, property); }
serializeTypedFields(value, jgen, provider); return; if (serializer == null) { if (_valueType.hasGenericTypes()) { serializer = _findAndAddDynamic(serializers, provider.constructSpecializedType(_valueType, cc), provider); } else { serializer = _findAndAddDynamic(serializers, cc, provider); wrapAndThrow(provider, e, value, keyDesc);
@Override public JsonNode getSchema(SerializerProvider provider, Type typeHint) { ObjectNode o = createSchemaNode("object", true); //(ryan) even though it's possible to statically determine the "value" type of the map, // there's no way to statically determine the keys, so the "Entries" can't be determined. return o; }
@Override public void serialize(Map<?,?> value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { jgen.writeStartObject(); if (!value.isEmpty()) { if (_valueSerializer != null) { serializeFieldsUsing(value, jgen, provider, _valueSerializer); } else { serializeFields(value, jgen, provider); } } jgen.writeEndObject(); }
/** * Helper method that handles configuration details when constructing serializers for * {@link java.util.Map} types. *<p> * Note: signature changed in 1.8, to take 'staticTyping' argument */ protected JsonSerializer<?> buildMapSerializer(SerializationConfig config, MapType type, BasicBeanDescription beanDesc, BeanProperty property, boolean staticTyping, JsonSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) { for (Serializers serializers : customSerializers()) { JsonSerializer<?> ser = serializers.findMapSerializer(config, type, beanDesc, property, keySerializer, elementTypeSerializer, elementValueSerializer); if (ser != null) { return ser; } } if (EnumMap.class.isAssignableFrom(type.getRawClass())) { return buildEnumMapSerializer(config, type, beanDesc, property, staticTyping, elementTypeSerializer, elementValueSerializer); } return MapSerializer.construct(config.getAnnotationIntrospector().findPropertiesToIgnore(beanDesc.getClassInfo()), type, staticTyping, elementTypeSerializer, property, keySerializer, elementValueSerializer); }
wrapAndThrow(provider, e, value, keyDesc);
public void resolve(SerializerProvider provider) throws JsonMappingException { _serializer.resolve(provider); } }
@Override public ContainerSerializerBase<?> _withValueTypeSerializer(TypeSerializer vts) { MapSerializer ms = new MapSerializer(_ignoredEntries, _keyType, _valueType, _valueTypeIsStatic, vts, _keySerializer, _valueSerializer, _property); if (_valueSerializer != null) { ms._valueSerializer = _valueSerializer; } return ms; }
public void getAndSerialize(Object bean, JsonGenerator jgen, SerializerProvider provider) throws Exception { Object value = _anyGetter.invoke(bean); if (value == null) { return; } if (!(value instanceof Map<?,?>)) { throw new JsonMappingException("Value returned by 'any-getter' ("+_anyGetter.getName()+"()) not java.util.Map but " +value.getClass().getName()); } _serializer.serializeFields((Map<?,?>) value, jgen, provider); }
@Override public void serializeWithType(Map<?,?> value, JsonGenerator jgen, SerializerProvider provider, TypeSerializer typeSer) throws IOException, JsonGenerationException { typeSer.writeTypePrefixForObject(value, jgen); if (!value.isEmpty()) { if (_valueSerializer != null) { serializeFieldsUsing(value, jgen, provider, _valueSerializer); } else { serializeFields(value, jgen, provider); } } typeSer.writeTypeSuffixForObject(value, jgen); }
TypeSerializer typeSer = createTypeSerializer(config, valueType, property); MapSerializer mapSer = MapSerializer.construct(/* ignored props*/ null, type, staticTyping, typeSer, property, null, null); builder.setAnyGetter(new AnyGetterWriter(anyGetter, mapSer));
wrapAndThrow(provider, e, value, keyDesc);
public void resolve(SerializerProvider provider) throws JsonMappingException { _serializer.resolve(provider); } }
@Override public ContainerSerializerBase<?> _withValueTypeSerializer(TypeSerializer vts) { MapSerializer ms = new MapSerializer(_ignoredEntries, _keyType, _valueType, _valueTypeIsStatic, vts, _keySerializer, _valueSerializer, _property); if (_valueSerializer != null) { ms._valueSerializer = _valueSerializer; } return ms; }
public void getAndSerialize(Object bean, JsonGenerator jgen, SerializerProvider provider) throws Exception { Object value = _anyGetter.invoke(bean); if (value == null) { return; } if (!(value instanceof Map<?,?>)) { throw new JsonMappingException("Value returned by 'any-getter' ("+_anyGetter.getName()+"()) not java.util.Map but " +value.getClass().getName()); } _serializer.serializeFields((Map<?,?>) value, jgen, provider); }
public static MapSerializer construct(String[] ignoredList, JavaType mapType, boolean staticValueType, TypeSerializer vts, BeanProperty property, JsonSerializer<Object> keySerializer, JsonSerializer<Object> valueSerializer) { HashSet<String> ignoredEntries = toSet(ignoredList); JavaType keyType, valueType; if (mapType == null) { keyType = valueType = UNSPECIFIED_TYPE; } else { keyType = mapType.getKeyType(); valueType = mapType.getContentType(); } // If value type is final, it's same as forcing static value typing: if (!staticValueType) { staticValueType = (valueType != null && valueType.isFinal()); } return new MapSerializer(ignoredEntries, keyType, valueType, staticValueType, vts, keySerializer, valueSerializer, property); }
serializeTypedFields(value, jgen, provider); return; if (serializer == null) { if (_valueType.hasGenericTypes()) { serializer = _findAndAddDynamic(serializers, provider.constructSpecializedType(_valueType, cc), provider); } else { serializer = _findAndAddDynamic(serializers, cc, provider); wrapAndThrow(provider, e, value, keyDesc);
@Override public void serialize(Map<?,?> value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { jgen.writeStartObject(); if (!value.isEmpty()) { if (_valueSerializer != null) { serializeFieldsUsing(value, jgen, provider, _valueSerializer); } else { serializeFields(value, jgen, provider); } } jgen.writeEndObject(); }
/** * Helper method that handles configuration details when constructing serializers for * {@link java.util.Map} types. *<p> * Note: signature changed in 1.8, to take 'staticTyping' argument */ protected JsonSerializer<?> buildMapSerializer(SerializationConfig config, MapType type, BasicBeanDescription beanDesc, BeanProperty property, boolean staticTyping, JsonSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) { for (Serializers serializers : customSerializers()) { JsonSerializer<?> ser = serializers.findMapSerializer(config, type, beanDesc, property, keySerializer, elementTypeSerializer, elementValueSerializer); if (ser != null) { return ser; } } if (EnumMap.class.isAssignableFrom(type.getRawClass())) { return buildEnumMapSerializer(config, type, beanDesc, property, staticTyping, elementTypeSerializer, elementValueSerializer); } return MapSerializer.construct(config.getAnnotationIntrospector().findPropertiesToIgnore(beanDesc.getClassInfo()), type, staticTyping, elementTypeSerializer, property, keySerializer, elementValueSerializer); }
wrapAndThrow(provider, e, value, keyDesc);