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/deser/std/StringDeserializer.java

    package com.fasterxml.jackson.databind.deser.std;
    
    import java.io.IOException;
    
    import com.fasterxml.jackson.core.*;
    import com.fasterxml.jackson.databind.*;
    import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
    import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
    import com.fasterxml.jackson.databind.type.LogicalType;
    
    @JacksonStdImpl
    public class StringDeserializer extends StdScalarDeserializer<String> // non-final since 2.9
    {
        private static final long serialVersionUID = 1L;
    
        /**
         * @since 2.2
         */
        public final static StringDeserializer instance = new StringDeserializer();
    
        public StringDeserializer() { super(String.class); }
    
        @Override // since 2.12
        public LogicalType logicalType() {
            return LogicalType.Textual;
        }
    
        // since 2.6, slightly faster lookups for this very common type
        @Override
        public boolean isCachable() { return true; }
    
        @Override // since 2.9
        public Object getEmptyValue(DeserializationContext ctxt) throws JsonMappingException {
            return "";
        }
    
        @Override
        public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
        {
            if (p.hasToken(JsonToken.VALUE_STRING)) {
                return p.getText();
            }
            JsonToken t = p.currentToken();
            // [databind#381]
            if (t == JsonToken.START_ARRAY) {
                return _deserializeFromArray(p, ctxt);
            }
            // need to gracefully handle byte[] data, as base64
            if (t == JsonToken.VALUE_EMBEDDED_OBJECT) {
                Object ob = p.getEmbeddedObject();
                if (ob == null) {
                    return null;
                }
                if (ob instanceof byte[]) {
                    return ctxt.getBase64Variant().encode((byte[]) ob, false);
                }
                // otherwise, try conversion using toString()...
                return ob.toString();
            }
            // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
            if (t == JsonToken.START_OBJECT) {
                return ctxt.extractScalarFromObject(p, this, _valueClass);
            }
            // allow coercions for other scalar types
            // 17-Jan-2018, tatu: Related to [databind#1853] avoid FIELD_NAME by ensuring it's
            //   "real" scalar
            if (t.isScalarValue()) {
                String text = p.getValueAsString();
                if (text != null) {
                    return text;
                }
            }
            return (String) ctxt.handleUnexpectedToken(_valueClass, p);
        }
    
        // Since we can never have type info ("natural type"; String, Boolean, Integer, Double):
        // (is it an error to even call this version?)
        @Override
        public String deserializeWithType(JsonParser p, DeserializationContext ctxt,
                TypeDeserializer typeDeserializer) throws IOException {
            return deserialize(p, ctxt);
        }
    }
    

    com/fasterxml/jackson/databind/deser/std/StringDeserializer.java

     

    ⇒ Jackson Annotations Source Code

    ⇐ Download and Install Jackson Binary Package

    ⇑ Downloading and Reviewing jackson-*.jar

    ⇑⇑ Jackson - Java JSON library

    2022-03-29, 31951👍, 0💬