@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2014 the original author or authors .
* Copyright 2002 - 2016 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -16,30 +16,42 @@
@@ -16,30 +16,42 @@
package org.springframework.http.converter.json ;
import com.fasterxml.jackson.annotation.ObjectIdGenerator ;
import com.fasterxml.jackson.annotation.ObjectIdResolver ;
import com.fasterxml.jackson.databind.DeserializationConfig ;
import com.fasterxml.jackson.databind.JsonDeserializer ;
import com.fasterxml.jackson.databind.JsonSerializer ;
import com.fasterxml.jackson.databind.KeyDeserializer ;
import com.fasterxml.jackson.databind.PropertyNamingStrategy ;
import com.fasterxml.jackson.databind.SerializationConfig ;
import com.fasterxml.jackson.databind.cfg.HandlerInstantiator ;
import com.fasterxml.jackson.databind.cfg.MapperConfig ;
import com.fasterxml.jackson.databind.deser.ValueInstantiator ;
import com.fasterxml.jackson.databind.introspect.Annotated ;
import com.fasterxml.jackson.databind.jsontype.TypeIdResolver ;
import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder ;
import com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter ;
import com.fasterxml.jackson.databind.util.Converter ;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory ;
import org.springframework.context.ApplicationContext ;
import org.springframework.util.Assert ;
/ * *
* Eventually get Jackson handler ( { @link JsonSerializer } , { @link JsonDeserializer } ,
* { @link KeyDeserializer } , { @link TypeResolverBuilder } , { @link TypeIdResolver } ) beans by
* type from Spring { @link ApplicationContext } . If no bean is found , the default behavior
* happen ( calling no - argument constructor via reflection ) .
* Allows for creating Jackson ( { @link JsonSerializer } , { @link JsonDeserializer } ,
* { @link KeyDeserializer } , { @link TypeResolverBuilder } , { @link TypeIdResolver } )
* beans with autowiring against a Spring { @link ApplicationContext } .
*
* < p > As of Spring 4 . 3 , this overrides all factory methods in { @link HandlerInstantiator } ,
* including non - abstract ones and recently introduced ones from Jackson 2 . 4 and 2 . 5 :
* for { @link ValueInstantiator } , { @link ObjectIdGenerator } , { @link ObjectIdResolver } ,
* { @link PropertyNamingStrategy } , { @link Converter } , { @link VirtualBeanPropertyWriter } .
*
* @since 4 . 1 . 3
* @author Sebastien Deleuze
* @author Juergen Hoeller
* @since 4 . 1 . 3
* @see Jackson2ObjectMapperBuilder # handlerInstantiator ( HandlerInstantiator )
* @see ApplicationContext # getAutowireCapableBeanFactory ( )
* @see HandlerInstantiator
* /
public class SpringHandlerInstantiator extends HandlerInstantiator {
@ -56,33 +68,66 @@ public class SpringHandlerInstantiator extends HandlerInstantiator {
@@ -56,33 +68,66 @@ public class SpringHandlerInstantiator extends HandlerInstantiator {
this . beanFactory = beanFactory ;
}
@Override
public JsonDeserializer < ? > deserializerInstance ( DeserializationConfig config , Annotated annotated , Class < ? > implClass ) {
return ( JsonDeserializer < ? > ) this . beanFactory . createBean ( implClass ) ;
}
@Override
public KeyDeserializer keyDeserializerInstance ( DeserializationConfig config , Annotated annotated , Class < ? > implClass ) {
return ( KeyDeserializer ) this . beanFactory . createBean ( implClass ) ;
}
@Override
public JsonSerializer < ? > serializerInstance ( SerializationConfig config ,
Annotated annotated , Class < ? > keyDeserClass ) {
return ( JsonSerializer < ? > ) this . beanFactory . createBean ( keyDeserClass ) ;
public JsonSerializer < ? > serializerInstance ( SerializationConfig config , Annotated annotated , Class < ? > implClass ) {
return ( JsonSerializer < ? > ) this . beanFactory . createBean ( implClass ) ;
}
@Override
public JsonDeserializer < ? > deserializerInstance ( DeserializationConfig config ,
Annotated annotated , Class < ? > deserClass ) {
return ( JsonDeserializer < ? > ) this . beanFactory . createBean ( deserClass ) ;
public TypeResolverBuilder < ? > typeResolverBuilderInstance ( MapperConfig < ? > config , Annotated annotated , Class < ? > implClass ) {
return ( TypeResolverBuilder < ? > ) this . beanFactory . createBean ( implClass ) ;
}
@Override
public KeyDeserializer keyDeserializerInstance ( DeserializationConfig config ,
Annotated annotated , Class < ? > serClass ) {
return ( KeyDeserializer ) this . beanFactory . createBean ( serClass ) ;
public TypeIdResolver typeIdResolverInstance ( MapperConfig < ? > config , Annotated annotated , Class < ? > implClass ) {
return ( TypeIdResolver ) this . beanFactory . createBean ( implClass ) ;
}
/** @since 4.3 */
@Override
public TypeResolverBuilder < ? > typeResolverBuilderInstance ( MapperConfig < ? > config ,
Annotated annotated , Class < ? > resolverClass ) {
return ( TypeResolverBuilder < ? > ) this . beanFactory . createBean ( resolverClass ) ;
public ValueInstantiator valueInstantiatorInstance ( MapperConfig < ? > config , Annotated annotated , Class < ? > implClass ) {
return ( ValueInstantiator ) this . beanFactory . createBean ( implClass ) ;
}
/** @since 4.3 */
@Override
public TypeIdResolver typeIdResolverInstance ( MapperConfig < ? > config ,
Annotated annotated , Class < ? > resolverClass ) {
return ( TypeIdResolver ) this . beanFactory . createBean ( resolverClass ) ;
public ObjectIdGenerator < ? > objectIdGeneratorInstance ( MapperConfig < ? > config , Annotated annotated , Class < ? > implClass ) {
return ( ObjectIdGenerator < ? > ) this . beanFactory . createBean ( implClass ) ;
}
/** @since 4.3 */
@Override
public ObjectIdResolver resolverIdGeneratorInstance ( MapperConfig < ? > config , Annotated annotated , Class < ? > implClass ) {
return ( ObjectIdResolver ) this . beanFactory . createBean ( implClass ) ;
}
/** @since 4.3 */
@Override
public PropertyNamingStrategy namingStrategyInstance ( MapperConfig < ? > config , Annotated annotated , Class < ? > implClass ) {
return ( PropertyNamingStrategy ) this . beanFactory . createBean ( implClass ) ;
}
/** @since 4.3 */
@Override
public Converter < ? , ? > converterInstance ( MapperConfig < ? > config , Annotated annotated , Class < ? > implClass ) {
return ( Converter < ? , ? > ) this . beanFactory . createBean ( implClass ) ;
}
/** @since 4.3 */
@Override
public VirtualBeanPropertyWriter virtualPropertyWriterInstance ( MapperConfig < ? > config , Class < ? > implClass ) {
return ( VirtualBeanPropertyWriter ) this . beanFactory . createBean ( implClass ) ;
}
}