Jackson Data Binding Source Code

Jackson is "the Java JSON library" or "the best JSON parser for Java". Or simply as "JSON for Java".

  • Jackson Data Binding module allows you to converts JSON to and from POJO (Plain Old Java Object) using property accessor or using annotations.
  • Jackson Databind Source Code files are provided in the source packge (jackson-databind-2.12.4-sources.jar). You can download it at Jackson Maven Website.

    You can also browse Jackson Databind Source Code below:

    ✍: FYIcenter.com

    com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.java

    package com.fasterxml.jackson.databind.jsontype.impl;
    
    import java.io.IOException;
    
    import com.fasterxml.jackson.annotation.JsonTypeInfo;
    import com.fasterxml.jackson.databind.DatabindContext;
    import com.fasterxml.jackson.databind.JavaType;
    import com.fasterxml.jackson.databind.cfg.MapperConfig;
    import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
    import com.fasterxml.jackson.databind.type.TypeFactory;
    
    public class MinimalClassNameIdResolver
        extends ClassNameIdResolver
    {
        /**
         * Package name of the base class, to be used for determining common
         * prefix that can be omitted from included type id.
         * Does not include the trailing dot.
         */
        protected final String _basePackageName;
    
        /**
         * Same as {@link #_basePackageName}, but includes trailing dot.
         */
        protected final String _basePackagePrefix;
    
        protected MinimalClassNameIdResolver(JavaType baseType, TypeFactory typeFactory,
                PolymorphicTypeValidator ptv)
        {
            super(baseType, typeFactory, ptv);
            String base = baseType.getRawClass().getName();
            int ix = base.lastIndexOf('.');
            if (ix < 0) { // can this ever occur?
                _basePackageName = "";
                _basePackagePrefix = ".";
            } else {
                _basePackagePrefix = base.substring(0, ix+1);
                _basePackageName = base.substring(0, ix);
            }
        }
    
        public static MinimalClassNameIdResolver construct(JavaType baseType, MapperConfig<?> config,
                PolymorphicTypeValidator ptv) {
            return new MinimalClassNameIdResolver(baseType, config.getTypeFactory(), ptv);
        }
    
        @Override
        public JsonTypeInfo.Id getMechanism() { return JsonTypeInfo.Id.MINIMAL_CLASS; }
        
        @Override
        public String idFromValue(Object value)
        {
            String n = value.getClass().getName();
            if (n.startsWith(_basePackagePrefix)) {
                // note: we will leave the leading dot in there
                return n.substring(_basePackagePrefix.length()-1);
            }
            return n;
        }
    
        @Override
        protected JavaType _typeFromId(String id, DatabindContext ctxt) throws IOException
        {
            if (id.startsWith(".")) {
                StringBuilder sb = new StringBuilder(id.length() + _basePackageName.length());
                if  (_basePackageName.isEmpty()) {
                    // no package; must remove leading '.' from id
                    sb.append(id.substring(1));
                } else {
                    // otherwise just concatenate package, with leading-dot-partial name
                    sb.append(_basePackageName).append(id);
                }
                id = sb.toString();
            }
            return super._typeFromId(id, ctxt);
        }
    }
    

    com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.java

     

    ⇒ Jackson Annotations Source Code

    ⇐ Download and Install Jackson Binary Package

    ⇑ Downloading and Reviewing jackson-*.jar

    ⇑⇑ Jackson - Java JSON library

    2022-03-29, 32074👍, 0💬