public class Jackson2ObjectMapperFactoryBean extends ObjectSE implements FactoryBean<ObjectMapper>, BeanClassLoaderAware, ApplicationContextAware, InitializingBean
ObjectMapper
(デフォルト)または XmlMapper
(createXmlMapper
プロパティを true に設定)を作成するための FactoryBean
は、XML 構成内から Jackson 機能を有効または無効にします。Jackson のデフォルトプロパティを次のようにカスタマイズします。
MappingJackson2HttpMessageConverter
の使用例:
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean" p:autoDetectFields="false" p:autoDetectGettersSetters="false" p:annotationIntrospector-ref="jaxbAnnotationIntrospector" /> </property> </bean>
MappingJackson2JsonView の使用例:
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"> <property name="objectMapper"> <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean" p:failOnEmptyBeans="false" p:indentOutput="true"> <property name="serializers"> <array> <bean class="org.mycompany.MyCustomSerializer" /> </array> </property> </bean> </property> </bean>
特定の setter が提供されていない場合(まれに使用されるオプションの場合)でも、より一般的な方法 setFeaturesToEnable(java.lang.Object...)
および setFeaturesToDisable(java.lang.Object...)
を使用できます。
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <property name="featuresToEnable"> <array> <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature.WRAP_ROOT_VALUE"/> <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature.CLOSE_CLOSEABLE"/> </array> </property> <property name="featuresToDisable"> <array> <util:constant static-field="com.fasterxml.jackson.databind.MapperFeature.USE_ANNOTATIONS"/> </array> </property> </bean>
また、次の既知のモジュールがクラスパスで検出された場合、自動的に登録します。
Path
SE のような Java 7 型のサポート Optional
SE のような他の Java 8 型のサポート Jackson の ObjectMapper
をカスタム Module
で構成する場合は、setModulesToInstall(java.lang.Class<? extends com.fasterxml.jackson.databind.Module>...)
を介してクラス名でこのようなモジュールを 1 つ以上登録できます。
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <property name="modulesToInstall" value="myapp.jackson.MySampleModule,myapp.jackson.MyOtherModule"/> </bean
Spring 4.3 の時点で、Jackson 2.6 以降と互換性があります。
OBJECT_TYPE_ATTRIBUTE
コンストラクターと説明 |
---|
Jackson2ObjectMapperFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() |
ObjectMapper | getObject() シングルトン ObjectMapper を返します。 |
ClassSE<?> | getObjectType() この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。 |
boolean | isSingleton() このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、 FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? |
void | setAnnotationIntrospector(AnnotationIntrospector annotationIntrospector) シリアライゼーションとデシリアライゼーションの両方に AnnotationIntrospector を設定します。 |
void | setApplicationContext(ApplicationContext applicationContext) Jackson ハンドラー( JsonSerializer 、JsonDeserializer 、KeyDeserializer 、TypeResolverBuilder 、TypeIdResolver )をオートワイヤーするために、ビルダー ApplicationContext を設定します。 |
void | setAutoDetectFields(boolean autoDetectFields) MapperFeature.AUTO_DETECT_FIELDS オプションのショートカット。 |
void | setAutoDetectGetterSetter(boolean autoDetectGetterSetter) |
void | setBeanClassLoader(ClassLoaderSE beanClassLoader) Bean class loader SE を Bean インスタンスに提供するコールバック。 |
void | setCreateXmlMapper(boolean createXmlMapper) true に設定し、カスタム ObjectMapper が設定されていない場合、デフォルトのコンストラクターを使用して XmlMapper が作成されます。 |
void | setDateFormat(DateFormatSE dateFormat) 指定された DateFormat SE で日付 / 時刻の形式を定義します。 |
void | setDefaultTyping(TypeResolverBuilder<?> typeResolverBuilder) Jackson のデフォルトの入力に使用する TypeResolverBuilder を指定します。 |
void | setDefaultUseWrapper(boolean defaultUseWrapper) ラッパーがインデックス付き(リスト、配列)プロパティに使用されるかどうかを定義します(既定では使用されません( XmlMapper のみに適用されます))。 |
void | setDefaultViewInclusion(boolean defaultViewInclusion) MapperFeature.DEFAULT_VIEW_INCLUSION オプションのショートカット。 |
void | setDeserializers(JsonDeserializer<?>... deserializers) カスタムデシリアライザーを構成します。 |
void | setDeserializersByType(MapSE<ClassSE<?>,JsonDeserializer<?>> deserializers) 指定された型のカスタムデシリアライザーを構成します。 |
void | setFactory(JsonFactory factory) ObjectMapper インスタンスの作成に使用される JsonFactory を定義します。 |
void | setFailOnEmptyBeans(boolean failOnEmptyBeans) SerializationFeature.FAIL_ON_EMPTY_BEANS オプションのショートカット。 |
void | setFailOnUnknownProperties(boolean failOnUnknownProperties) DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES オプションのショートカット。 |
void | setFeaturesToDisable(ObjectSE... featuresToDisable) 無効にする機能を指定します。 |
void | setFeaturesToEnable(ObjectSE... featuresToEnable) 有効にする機能を指定します。 |
void | setFilters(FilterProvider filters) @JsonFilter アノテーション付き POJO をサポートするために使用するグローバルフィルターを設定します。 |
void | setFindModulesViaServiceLoader(boolean findModules) クラスパス内の META-INF メタデータに基づいて、Jackson が JDK ServiceLoader を介して使用可能なモジュールを検索するかどうかを設定します。 |
void | setHandlerInstantiator(HandlerInstantiator handlerInstantiator) Jackson ハンドラー( JsonSerializer 、JsonDeserializer 、KeyDeserializer 、TypeResolverBuilder および TypeIdResolver )の構成をカスタマイズします。 |
void | setIndentOutput(boolean indentOutput) SerializationFeature.INDENT_OUTPUT オプションのショートカット。 |
void | setLocale(LocaleSE locale) フォーマットに使用するデフォルトの Locale SE をオーバーライドします。 |
void | setMixIns(MapSE<ClassSE<?>,ClassSE<?>> mixIns) 指定されたクラスまたはインターフェースを補強するために使用するミックスインアノテーションを追加します。 |
void | setModules(ListSE<Module> modules) ObjectMapper に登録するモジュールの完全なリストを設定します。 |
void | setModulesToInstall(ClassSE<? extends Module>... modules) ObjectMapper に登録する 1 つ以上のモジュールをクラス(または XML のクラス名)で指定します。 |
void | setObjectMapper(ObjectMapper objectMapper) 使用する ObjectMapper インスタンスを設定します。 |
void | setPropertyNamingStrategy(PropertyNamingStrategy propertyNamingStrategy) PropertyNamingStrategy を指定して、ObjectMapper を構成します。 |
void | setSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include serializationInclusion) 直列化のカスタム包含戦略を設定します。 |
void | setSerializers(JsonSerializer<?>... serializers) カスタムシリアライザーを構成します。 |
void | setSerializersByType(MapSE<ClassSE<?>,JsonSerializer<?>> serializers) 指定された型のカスタムシリアライザーを構成します。 |
void | setSimpleDateFormat(StringSE format) SimpleDateFormat SE を使用して日付 / 時刻形式を定義します。 |
void | setTimeZone(TimeZoneSE timeZone) フォーマットに使用するデフォルトの TimeZone SE をオーバーライドします。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setObjectMapper(ObjectMapper objectMapper)
ObjectMapper
インスタンスを設定します。設定しない場合、ObjectMapper
はデフォルトのコンストラクターを使用して作成されます。public void setCreateXmlMapper(boolean createXmlMapper)
ObjectMapper
が設定されていない場合、デフォルトのコンストラクターを使用して XmlMapper
が作成されます。public void setFactory(JsonFactory factory)
ObjectMapper
インスタンスの作成に使用される JsonFactory
を定義します。public void setDateFormat(DateFormatSE dateFormat)
DateFormat
SE で日付 / 時刻の形式を定義します。 メモ: このプロパティを設定すると、Jackson のスレッドセーフルールに従って、公開された ObjectMapper
が非スレッドセーフになります。
public void setSimpleDateFormat(StringSE format)
SimpleDateFormat
SE を使用して日付 / 時刻形式を定義します。 メモ: このプロパティを設定すると、Jackson のスレッドセーフルールに従って、公開された ObjectMapper
が非スレッドセーフになります。
public void setLocale(LocaleSE locale)
Locale
SE をオーバーライドします。使用されるデフォルト値は Locale.getDefault()
SE です。public void setTimeZone(TimeZoneSE timeZone)
TimeZone
SE をオーバーライドします。使用されるデフォルト値は UTC です(ローカルタイムゾーンではありません)。public void setAnnotationIntrospector(AnnotationIntrospector annotationIntrospector)
AnnotationIntrospector
を設定します。public void setPropertyNamingStrategy(PropertyNamingStrategy propertyNamingStrategy)
PropertyNamingStrategy
を指定して、ObjectMapper
を構成します。public void setDefaultTyping(TypeResolverBuilder<?> typeResolverBuilder)
TypeResolverBuilder
を指定します。public void setSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include serializationInclusion)
JsonInclude.Include
public void setFilters(FilterProvider filters)
@JsonFilter
アノテーション付き POJO をサポートするために使用するグローバルフィルターを設定します。public void setMixIns(MapSE<ClassSE<?>,ClassSE<?>> mixIns)
mixIns
- アノテーションがキーとして効果的にオーバーライドされるターゲットクラス(またはインターフェース)と、アノテーションが値としてターゲットのアノテーションに「追加」されるミックスインクラス(またはインターフェース)を持つエントリのマップ。ObjectMapper.addMixInAnnotations(Class, Class)
public void setSerializers(JsonSerializer<?>... serializers)
JsonSerializer.handledType()
によって返される型用に登録されますが、null
であってはなりません。public void setSerializersByType(MapSE<ClassSE<?>,JsonSerializer<?>> serializers)
public void setDeserializers(JsonDeserializer<?>... deserializers)
JsonDeserializer.handledType()
によって返される型に対して登録されますが、null
であってはなりません。setDeserializersByType(Map)
public void setDeserializersByType(MapSE<ClassSE<?>,JsonDeserializer<?>> deserializers)
public void setAutoDetectFields(boolean autoDetectFields)
MapperFeature.AUTO_DETECT_FIELDS
オプションのショートカット。public void setAutoDetectGettersSetters(boolean autoDetectGettersSetters)
public void setDefaultViewInclusion(boolean defaultViewInclusion)
MapperFeature.DEFAULT_VIEW_INCLUSION
オプションのショートカット。public void setFailOnUnknownProperties(boolean failOnUnknownProperties)
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
オプションのショートカット。public void setFailOnEmptyBeans(boolean failOnEmptyBeans)
SerializationFeature.FAIL_ON_EMPTY_BEANS
オプションのショートカット。public void setIndentOutput(boolean indentOutput)
SerializationFeature.INDENT_OUTPUT
オプションのショートカット。public void setDefaultUseWrapper(boolean defaultUseWrapper)
XmlMapper
のみに適用されます))。public void setFeaturesToEnable(ObjectSE... featuresToEnable)
public void setFeaturesToDisable(ObjectSE... featuresToDisable)
public void setModules(ListSE<Module> modules)
ObjectMapper
に登録するモジュールの完全なリストを設定します。 メモ: これが設定されている場合、モジュールの検出は行われません -Jackson でも Spring でもありません(setFindModulesViaServiceLoader(boolean)
を参照)。結果として、ここで空のリストを指定すると、あらゆる種類のモジュール検出が抑制されます。
これまたは setModulesToInstall(java.lang.Class<? extends com.fasterxml.jackson.databind.Module>...)
の両方ではなく、いずれかを指定します。
Module
public void setModulesToInstall(ClassSE<? extends Module>... modules)
ObjectMapper
に登録する 1 つ以上のモジュールをクラス(または XML のクラス名)で指定します。 ここで指定されたモジュールは、Spring による JSR-310 および Joda-Time の自動検出、または Jackson によるモジュールの検出(setFindModulesViaServiceLoader(boolean)
を参照)後に登録され、最終的にそれらの構成をオーバーライドできます。
これまたは setModules(java.util.List<com.fasterxml.jackson.databind.Module>)
の両方ではなく、いずれかを指定します。
Module
public void setFindModulesViaServiceLoader(boolean findModules)
このモードが設定されていない場合、Spring の Jackson2ObjectMapperFactoryBean 自体は、クラスパス上で JSR-310 および Joda-Time サポートモジュールを見つけようとします。Java 8 および Joda-Time 自体がそれぞれ利用可能である場合。
ObjectMapper.findModules()
public void setBeanClassLoader(ClassLoaderSE beanClassLoader)
BeanClassLoaderAware
class loader
SE を Bean インスタンスに提供するコールバック。 通常の Bean プロパティの設定後、ただし InitializingBean's
InitializingBean.afterPropertiesSet()
メソッドやカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanClassLoaderAware
の setBeanClassLoader
beanClassLoader
- 所有クラスローダー public void setHandlerInstantiator(HandlerInstantiator handlerInstantiator)
JsonSerializer
、JsonDeserializer
、KeyDeserializer
、TypeResolverBuilder
および TypeIdResolver
)の構成をカスタマイズします。setApplicationContext(ApplicationContext)
public void setApplicationContext(ApplicationContext applicationContext)
JsonSerializer
、JsonDeserializer
、KeyDeserializer
、TypeResolverBuilder
、TypeIdResolver
)をオートワイヤーするために、ビルダー ApplicationContext
を設定します。ApplicationContextAware
の setApplicationContext
applicationContext
- このオブジェクトによって使用される ApplicationContext オブジェクト Jackson2ObjectMapperBuilder.applicationContext(ApplicationContext)
, SpringHandlerInstantiator
public void afterPropertiesSet()
InitializingBean
BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含 BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean
の afterPropertiesSet
@Nullable public ObjectMapper getObject()
FactoryBean<ObjectMapper>
の getObject
null
にすることができます)FactoryBeanNotInitializedException
public ClassSE<?> getObjectType()
FactoryBean
null
を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null
を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<ObjectMapper>
の getObjectType
null
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
public boolean isSingleton()
FactoryBean
FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? 注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject()
から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true
を返さないでください。
FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。
注意 : false
を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean
インターフェースの実装は、SmartFactoryBean.isPrototype()
メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean
実装は、isSingleton()
実装が false
を返す場合、常に独立したインスタンスを返すと単純に想定されます。
FactoryBean
は通常シングルトンインスタンスを管理するため、デフォルトの実装では true
が返されます。
FactoryBean<ObjectMapper>
の isSingleton
FactoryBean.getObject()
, SmartFactoryBean.isPrototype()