1 package com.fasterxml.jackson.databind.ser; 2 3 import com.fasterxml.jackson.databind.*; 4 import com.fasterxml.jackson.databind.jsontype.TypeSerializer; 5 import com.fasterxml.jackson.databind.type.*; 6 7 /** 8 * Interface that defines API for simple extensions that can provide additional serializers 9 * for various types. Access is by a single callback method; instance is to either return 10 * a configured {@link JsonSerializer} for specified type, or null to indicate that it 11 * does not support handling of the type. In latter case, further calls can be made 12 * for other providers; in former case returned serializer is used for handling of 13 * instances of specified type. 14 */ 15 public interface Serializers 16 { 17 /** 18 * Method called by serialization framework first time a serializer is needed for 19 * specified type, which is not of a container or reference type (for which 20 * other methods are called). 21 * 22 * @param type Fully resolved type of instances to serialize 23 * @param config Serialization configuration in use 24 * @param beanDesc Additional information about type 25 * 26 * @return Configured serializer to use for the type; or null if implementation 27 * does not recognize or support type 28 */ findSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc)29 public JsonSerializer<?> findSerializer(SerializationConfig config, 30 JavaType type, BeanDescription beanDesc); 31 32 /** 33 * Method called by serialization framework first time a serializer is needed for 34 * given {@link ReferenceType} 35 * 36 * @since 2.7 37 */ findReferenceSerializer(SerializationConfig config, ReferenceType type, BeanDescription beanDesc, TypeSerializer contentTypeSerializer, JsonSerializer<Object> contentValueSerializer)38 public JsonSerializer<?> findReferenceSerializer(SerializationConfig config, 39 ReferenceType type, BeanDescription beanDesc, 40 TypeSerializer contentTypeSerializer, JsonSerializer<Object> contentValueSerializer); 41 42 /** 43 * Method called by serialization framework first time a serializer is needed for 44 * specified array type. 45 * Implementation should return a serializer instance if it supports 46 * specified type; or null if it does not. 47 */ findArraySerializer(SerializationConfig config, ArrayType type, BeanDescription beanDesc, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)48 public JsonSerializer<?> findArraySerializer(SerializationConfig config, 49 ArrayType type, BeanDescription beanDesc, 50 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer); 51 52 /** 53 * Method called by serialization framework first time a serializer is needed for 54 * specified {@link java.util.Collection} type. 55 * Implementation should return a serializer instance if it supports 56 * specified type; or null if it does not. 57 */ findCollectionSerializer(SerializationConfig config, CollectionType type, BeanDescription beanDesc, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)58 public JsonSerializer<?> findCollectionSerializer(SerializationConfig config, 59 CollectionType type, BeanDescription beanDesc, 60 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer); 61 62 /** 63 * Method called by serialization framework first time a serializer is needed for 64 * specified "Collection-like" type (type that acts like {@link java.util.Collection}, 65 * but does not implement it). 66 * Implementation should return a serializer instance if it supports 67 * specified type; or null if it does not. 68 */ findCollectionLikeSerializer(SerializationConfig config, CollectionLikeType type, BeanDescription beanDesc, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)69 public JsonSerializer<?> findCollectionLikeSerializer(SerializationConfig config, 70 CollectionLikeType type, BeanDescription beanDesc, 71 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer); 72 73 /** 74 * Method called by serialization framework first time a serializer is needed for 75 * specified {@link java.util.Map} type. 76 * Implementation should return a serializer instance if it supports 77 * specified type; or null if it does not. 78 */ findMapSerializer(SerializationConfig config, MapType type, BeanDescription beanDesc, JsonSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)79 public JsonSerializer<?> findMapSerializer(SerializationConfig config, 80 MapType type, BeanDescription beanDesc, 81 JsonSerializer<Object> keySerializer, 82 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer); 83 84 /** 85 * Method called by serialization framework first time a serializer is needed for 86 * specified "Map-like" type (type that acts like {@link java.util.Map}, 87 * but does not implement it). 88 * Implementation should return a serializer instance if it supports 89 * specified type; or null if it does not. 90 */ findMapLikeSerializer(SerializationConfig config, MapLikeType type, BeanDescription beanDesc, JsonSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)91 public JsonSerializer<?> findMapLikeSerializer(SerializationConfig config, 92 MapLikeType type, BeanDescription beanDesc, 93 JsonSerializer<Object> keySerializer, 94 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer); 95 96 /** 97 * Basic {@link Serializers} implementation that implements all methods but provides 98 * no serializers. Its main purpose is to serve as a base class so that 99 * sub-classes only need to override methods they need. 100 */ 101 public static class Base implements Serializers 102 { 103 @Override findSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc)104 public JsonSerializer<?> findSerializer(SerializationConfig config, 105 JavaType type, BeanDescription beanDesc) 106 { 107 return null; 108 } 109 110 @Override findReferenceSerializer(SerializationConfig config, ReferenceType type, BeanDescription beanDesc, TypeSerializer contentTypeSerializer, JsonSerializer<Object> contentValueSerializer)111 public JsonSerializer<?> findReferenceSerializer(SerializationConfig config, 112 ReferenceType type, BeanDescription beanDesc, 113 TypeSerializer contentTypeSerializer, JsonSerializer<Object> contentValueSerializer) { 114 // 21-Oct-2015, tatu: For backwards compatibility, let's delegate to "bean" variant, 115 // for 2.7 -- remove work-around from 2.8 or later 116 return findSerializer(config, type, beanDesc); 117 } 118 119 @Override findArraySerializer(SerializationConfig config, ArrayType type, BeanDescription beanDesc, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)120 public JsonSerializer<?> findArraySerializer(SerializationConfig config, 121 ArrayType type, BeanDescription beanDesc, 122 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) 123 { 124 return null; 125 } 126 127 @Override findCollectionSerializer(SerializationConfig config, CollectionType type, BeanDescription beanDesc, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)128 public JsonSerializer<?> findCollectionSerializer(SerializationConfig config, 129 CollectionType type, BeanDescription beanDesc, 130 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) 131 { 132 return null; 133 } 134 135 @Override findCollectionLikeSerializer(SerializationConfig config, CollectionLikeType type, BeanDescription beanDesc, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)136 public JsonSerializer<?> findCollectionLikeSerializer(SerializationConfig config, 137 CollectionLikeType type, BeanDescription beanDesc, 138 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) 139 { 140 return null; 141 } 142 143 @Override findMapSerializer(SerializationConfig config, MapType type, BeanDescription beanDesc, JsonSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)144 public JsonSerializer<?> findMapSerializer(SerializationConfig config, 145 MapType type, BeanDescription beanDesc, 146 JsonSerializer<Object> keySerializer, 147 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) 148 { 149 return null; 150 } 151 152 @Override findMapLikeSerializer(SerializationConfig config, MapLikeType type, BeanDescription beanDesc, JsonSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer)153 public JsonSerializer<?> findMapLikeSerializer(SerializationConfig config, 154 MapLikeType type, BeanDescription beanDesc, 155 JsonSerializer<Object> keySerializer, 156 TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) 157 { 158 return null; 159 } 160 } 161 } 162