1 package com.fasterxml.jackson.databind.ser.std;
2
3 import java.lang.reflect.Type;
4 import java.io.IOException;
5
6 import com.fasterxml.jackson.core.*;
7 import com.fasterxml.jackson.databind.*;
8 import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
9 import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
10 import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
11
12 /**
13  * This is a simple dummy serializer that will just output literal
14  * JSON null value whenever serialization is requested.
15  * Used as the default "null serializer" (which is used for serializing
16  * null object references unless overridden), as well as for some
17  * more exotic types (java.lang.Void).
18  */

19 @JacksonStdImpl
20 @SuppressWarnings("serial")
21 public class NullSerializer
22     extends StdSerializer<Object>
23 {
24     public final static NullSerializer instance = new NullSerializer();
25     
26     private NullSerializer() { super(Object.class); }
27     
28     @Override
29     public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
30         gen.writeNull();
31     }
32
33     /**
34      * Although this method should rarely get called, for convenience we should override
35      * it, and handle it same way as "natural" types: by serializing exactly as is,
36      * without type decorations. The most common possible use case is that of delegation
37      * by JSON filter; caller cannot know what kind of serializer it gets handed.
38      */

39     @Override
40     public void serializeWithType(Object value, JsonGenerator gen, SerializerProvider serializers,
41             TypeSerializer typeSer)
42         throws IOException
43     {
44         gen.writeNull();
45     }
46     
47     @Override
48     public JsonNode getSchema(SerializerProvider provider, Type typeHint) throws JsonMappingException {
49         return createSchemaNode("null");
50     }
51     
52     @Override
53     public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint) throws JsonMappingException {
54         visitor.expectNullFormat(typeHint);
55     }
56 }
57