Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.fasterxml.jackson.databind.ser.std;
  
  import java.io.*;
  import java.util.*;
  
  
Class that providers access to serializers user for non-structured JDK types that are serializer as scalars; some using basic ToStringSerializer, others explicit serializers.
 
 public class StdJdkSerializers
     implements Provider<Map.Entry<Class<?>,Object>>
 {
    
Method called by com.fasterxml.jackson.databind.ser.BasicSerializerFactory to access all serializers this class provides.
 
 //  @Override
     public Collection<Map.Entry<Class<?>, Object>> provide()
     {
         HashMap<Class<?>,Objectsers = new HashMap<Class<?>,Object>();
 
         // First things that 'toString()' can handle
         final ToStringSerializer sls = .;
 
         sers.put(java.net.URL.classsls);
         sers.put(java.net.URI.classsls);
 
         sers.put(Currency.classsls);
         sers.put(UUID.classsls);
         sers.put(java.util.regex.Pattern.classsls);
         sers.put(Locale.classsls);
 
         // starting with 1.7, use compact String for Locale
         sers.put(Locale.classsls);
         
         // then atomic types
         sers.put(AtomicReference.classAtomicReferenceSerializer.class);
         sers.put(AtomicBoolean.classAtomicBooleanSerializer.class);
         sers.put(AtomicInteger.classAtomicIntegerSerializer.class);
         sers.put(AtomicLong.classAtomicLongSerializer.class);
         
         // then types that need specialized serializers
         sers.put(File.classFileSerializer.class);
         sers.put(Class.classClassSerializer.class);
 
         // And then some stranger types... not 100% they are needed but:
         sers.put(.NullSerializer.class);
         
         return sers.entrySet();
     }
 
     /*
      ********************************************************
      * Serializers for atomic types
      ********************************************************
      */
 
     public final static class AtomicBooleanSerializer
         extends StdScalarSerializer<AtomicBoolean>
     {
         public AtomicBooleanSerializer() { super(AtomicBoolean.classfalse); }
     
         @Override
         public void serialize(AtomicBoolean valueJsonGenerator jgenSerializerProvider provider)
             throws IOExceptionJsonGenerationException
         {
             jgen.writeBoolean(value.get());
         }
     
         @Override
         public JsonNode getSchema(SerializerProvider providerType typeHint)
         {
             return createSchemaNode("boolean"true);
         }
         
         @Override
         public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitorJavaType typeHint)
         {
         	visitor.expectBooleanFormat(typeHint);
         }
     }
     
     public final static class AtomicIntegerSerializer
         extends StdScalarSerializer<AtomicInteger>
     {
         public AtomicIntegerSerializer() { super(AtomicInteger.classfalse); }
     
         @Override
         public void serialize(AtomicInteger valueJsonGenerator jgenSerializerProvider provider)
            throws IOExceptionJsonGenerationException
        {
            jgen.writeNumber(value.get());
        }
    
        @Override
        public JsonNode getSchema(SerializerProvider providerType typeHint)
        {
            return createSchemaNode("integer"true);
        }
        
        @Override
        public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitorJavaType typeHint)
        {
        	visitor.expectIntegerFormat(typeHint);
        }
    }
    public final static class AtomicLongSerializer
        extends StdScalarSerializer<AtomicLong>
    {
        public AtomicLongSerializer() { super(AtomicLong.classfalse); }
    
        @Override
        public void serialize(AtomicLong valueJsonGenerator jgenSerializerProvider provider)
            throws IOExceptionJsonGenerationException
        {
            jgen.writeNumber(value.get());
        }
    
        @Override
        public JsonNode getSchema(SerializerProvider providerType typeHint)
        {
            return createSchemaNode("integer"true);
        }
        
        @Override
        public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitorJavaType typeHint)
        {
        	visitor.expectIntegerFormat(typeHint);
        }
    }
    
    public final static class AtomicReferenceSerializer
        extends StdSerializer<AtomicReference<?>>
    {
        public AtomicReferenceSerializer() { super(AtomicReference.classfalse); }
        @Override
        public void serialize(AtomicReference<?> valueJsonGenerator jgenSerializerProvider provider)
            throws IOExceptionJsonGenerationException
        {
            provider.defaultSerializeValue(value.get(), jgen);
        }
        @Override
        public JsonNode getSchema(SerializerProvider providerType typeHint)
        {
            return createSchemaNode("any"true);
        }
        
        @Override
        public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitorJavaType typeHint)
        {
        	visitor.expectAnyFormat(typeHint);
        }
    }
    
    /*
    /**********************************************************
    /* Specialized serializers, referential types
    /**********************************************************
     */

    
For now, File objects get serialized by just outputting absolute (but not canonical) name as String value
    public final static class FileSerializer
        extends StdScalarSerializer<File>
    {
        public FileSerializer() { super(File.class); }
        @Override
        public void serialize(File valueJsonGenerator jgenSerializerProvider provider)
            throws IOExceptionJsonGenerationException
        {
            jgen.writeString(value.getAbsolutePath());
        }
        @Override
        public JsonNode getSchema(SerializerProvider providerType typeHint)
        {
            return createSchemaNode("string"true);
        }
        
        @Override
        public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitorJavaType typeHint)
        {
        	visitor.expectStringFormat(typeHint);
        }
    }

    
Also: default bean access will not do much good with Class.class. But we can just serialize the class name and that should be enough.
    public final static class ClassSerializer
        extends StdScalarSerializer<Class<?>>
    {
        public ClassSerializer() { super(Class.classfalse); }
        @Override
        public void serialize(Class<?> valueJsonGenerator jgenSerializerProvider provider)
            throws IOExceptionJsonGenerationException
        {
            jgen.writeString(value.getName());
        }
        @Override
        public JsonNode getSchema(SerializerProvider providerType typeHint)
        {
            return createSchemaNode("string"true);
        }
        
        @Override
        public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitorJavaType typeHint)
        {
        	visitor.expectStringFormat(typeHint);
        }
    }
New to GrepCode? Check out our FAQ X