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>
また、次の既知のモジュールがクラスパスで検出された場合、自動的に登録します。
PathSE のような Java 7 型のサポート OptionalSE のような他の 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 以降と互換性があります。
| コンストラクターと説明 |
|---|
Jackson2ObjectMapperFactoryBean() |
| 修飾子と型 | メソッドと説明 |
|---|---|
void | afterPropertiesSet() 指定されたすべての Bean プロパティを設定した(そして BeanFactoryAware と ApplicationContextAware を満たした)後に BeanFactory によって呼び出されます。 |
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 loaderSE を Bean インスタンスに提供するコールバック。 |
void | setCreateXmlMapper(boolean createXmlMapper)true に設定し、カスタム ObjectMapper が設定されていない場合、デフォルトのコンストラクターを使用して XmlMapper が作成されます。 |
void | setDateFormat(DateFormatSE dateFormat) 指定された DateFormatSE で日付 / 時刻の形式を定義します。 |
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) フォーマットに使用するデフォルトの LocaleSE をオーバーライドします。 |
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)SimpleDateFormatSE を使用して日付 / 時刻形式を定義します。 |
void | setTimeZone(TimeZoneSE timeZone) フォーマットに使用するデフォルトの TimeZoneSE をオーバーライドします。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEpublic 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)
DateFormatSE で日付 / 時刻の形式を定義します。 メモ: このプロパティを設定すると、Jackson のスレッドセーフルールに従って、公開された ObjectMapper が非スレッドセーフになります。
public void setSimpleDateFormat(StringSE format)
SimpleDateFormatSE を使用して日付 / 時刻形式を定義します。 メモ: このプロパティを設定すると、Jackson のスレッドセーフルールに従って、公開された ObjectMapper が非スレッドセーフになります。
public void setLocale(LocaleSE locale)
LocaleSE をオーバーライドします。使用されるデフォルト値は Locale.getDefault()SE です。public void setTimeZone(TimeZoneSE timeZone)
TimeZoneSE をオーバーライドします。使用されるデフォルト値は 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.Includepublic 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>...) の両方ではなく、いずれかを指定します。
Modulepublic 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>) の両方ではなく、いずれかを指定します。
Modulepublic void setFindModulesViaServiceLoader(boolean findModules)
このモードが設定されていない場合、Spring の Jackson2ObjectMapperFactoryBean 自体は、クラスパス上で JSR-310 および Joda-Time サポートモジュールを見つけようとします。Java 8 および Joda-Time 自体がそれぞれ利用可能である場合。
ObjectMapper.findModules()public void setBeanClassLoader(ClassLoaderSE beanClassLoader)
BeanClassLoaderAwareclass loaderSE を 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), SpringHandlerInstantiatorpublic void afterPropertiesSet()
InitializingBeanこのメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されている場合にのみ可能な初期化を実行し、設定ミスの場合に例外をスローできます。
InitializingBean の afterPropertiesSet @Nullable public ObjectMapper getObject()
FactoryBean<ObjectMapper> の getObject null にすることができます)FactoryBeanNotInitializedExceptionpublic ClassSE<?> getObjectType()
FactoryBeannull を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<ObjectMapper> の getObjectType null ListableBeanFactory.getBeansOfType(java.lang.Class<T>)public boolean isSingleton()
FactoryBeanFactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? 注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject() から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true を返さないでください。
FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。
注意 : false を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean インターフェースの実装は、SmartFactoryBean.isPrototype() メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean 実装は、isSingleton() 実装が false を返す場合、常に独立したインスタンスを返すと単純に想定されます。
FactoryBean は通常シングルトンインスタンスを管理するため、デフォルトの実装では true が返されます。
FactoryBean<ObjectMapper> の isSingleton FactoryBean.getObject(), SmartFactoryBean.isPrototype()