package com.fasterxml.jackson.databind;

import java.io.IOException;

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.format.InputAccessor;
import com.fasterxml.jackson.core.format.MatchStrength;

Sub-class of JsonFactory that will create a proper ObjectCodec to allow seam-less conversions between JSON content and Java objects (POJOs). The only addition to regular JsonFactory currently is that ObjectMapper is constructed and passed as the codec to use.
/** * Sub-class of {@link JsonFactory} that will create a proper * {@link ObjectCodec} to allow seam-less conversions between * JSON content and Java objects (POJOs). * The only addition to regular {@link JsonFactory} currently * is that {@link ObjectMapper} is constructed and passed as * the codec to use. */
public class MappingJsonFactory extends JsonFactory { private static final long serialVersionUID = -1; // since 2.7 public MappingJsonFactory() { this(null); } public MappingJsonFactory(ObjectMapper mapper) { super(mapper); if (mapper == null) { setCodec(new ObjectMapper(this)); } } public MappingJsonFactory(JsonFactory src, ObjectMapper mapper) { super(src, mapper); if (mapper == null) { setCodec(new ObjectMapper(this)); } }
We'll override the method to return more specific type; co-variance helps here
/** * We'll override the method to return more specific type; co-variance * helps here */
@Override public final ObjectMapper getCodec() { return (ObjectMapper) _objectCodec; } // @since 2.1 @Override public JsonFactory copy() { _checkInvalidCopy(MappingJsonFactory.class); // note: as with base class, must NOT copy mapper reference return new MappingJsonFactory(this, null); } /* /********************************************************** /* Format detection functionality (since 1.8) /********************************************************** */
Sub-classes need to override this method
/** * Sub-classes need to override this method */
@Override public String getFormatName() { /* since non-JSON factories typically should not extend this class, * let's just always return JSON as name. */ return FORMAT_NAME_JSON; }
Sub-classes need to override this method
/** * Sub-classes need to override this method */
@Override public MatchStrength hasFormat(InputAccessor acc) throws IOException { if (getClass() == MappingJsonFactory.class) { return hasJSONFormat(acc); } return null; } }