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/ser/impl/WritableObjectId.java

    package com.fasterxml.jackson.databind.ser.impl;
    
    import java.io.IOException;
    
    import com.fasterxml.jackson.annotation.ObjectIdGenerator;
    
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.core.SerializableString;
    
    import com.fasterxml.jackson.databind.SerializerProvider;
    
    /**
     * Simple value container used to keep track of Object Ids during
     * serialization.
     */
    public final class WritableObjectId
    {
        public final ObjectIdGenerator<?> generator;
    
        public Object id;
    
        /**
         * Marker to denote whether Object Id value has been written as part of an Object,
         * to be referencible. Remains false when forward-reference is written.
         */
        protected boolean idWritten = false;
    
        public WritableObjectId(ObjectIdGenerator<?> generator) {
            this.generator = generator;
        }
    
        public boolean writeAsId(JsonGenerator gen, SerializerProvider provider, ObjectIdWriter w) throws IOException
        {
            if ((id != null) && (idWritten || w.alwaysAsId)) {
                // 03-Aug-2013, tatu: Prefer Native Object Ids if available
                if (gen.canWriteObjectId()) {
                    gen.writeObjectRef(String.valueOf(id));
                } else {
                    w.serializer.serialize(id, gen, provider);
                }
                return true;
            }
            return false;
        }
        
        public Object generateId(Object forPojo) {
            // 04-Jun-2016, tatu: As per [databind#1255], need to consider possibility of
            //    id being generated for "alwaysAsId", but not being written as POJO; regardless,
            //    need to use existing id if there is one:
            if (id == null) {
                id = generator.generateId(forPojo);
            }
            return id;
        }
    
        /**
         * Method called to output Object Id as specified.
         */
        public void writeAsField(JsonGenerator gen, SerializerProvider provider,
                ObjectIdWriter w) throws IOException
        {
            idWritten = true;
    
            // 03-Aug-2013, tatu: Prefer Native Object Ids if available
            if (gen.canWriteObjectId()) {
                // Need to assume String(ified) ids, for now... could add 'long' variant?
                // 05-Feb-2019, tatu: But in special case of `null` we should not coerce -- whether
                //   we should even call is an open question, but for now do pass to let generator
                //   decide what to do, if anything.
                String idStr = (id == null) ? null : String.valueOf(id);
                gen.writeObjectId(idStr);
                return;
            }
    
            SerializableString name = w.propertyName;
            if (name != null) {
                // 05-Feb-2019, tatu: How about `null` id? For now, write
                gen.writeFieldName(name);
                w.serializer.serialize(id, gen, provider);
            }
        }
    }
    

    com/fasterxml/jackson/databind/ser/impl/WritableObjectId.java

     

    ⇒ Jackson Annotations Source Code

    ⇐ Download and Install Jackson Binary Package

    ⇑ Downloading and Reviewing jackson-*.jar

    ⇑⇑ Jackson - Java JSON library

    2022-03-29, 32036👍, 0💬