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