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 */
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 */
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 */
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 */
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 */
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 */
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 */
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
104 public JsonSerializer<?> findSerializer(SerializationConfig config,
105 JavaType type, BeanDescription beanDesc)
106 {
107 return null;
108 }
109
110 @Override
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
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
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
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
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
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