• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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