ジャクソンの機能をカスタマイズするために、スプリングブート1.4でJackson2ObjectMapperBuilderCustomizer.Javaを使用する方法の例を見つけることができませんでした。
ブート1.4でJacksonをカスタマイズするためのドコ- http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-customize-the-jackson-
私の構成は動作しますが、これがJackson2ObjectMapperBuilderCustomizer.Javaを使用してオブジェクトマッパーをカスタマイズする正しい方法であるかどうかはわかりません
@Configuration
public class JacksonAutoConfiguration {
@Autowired
private Environment env;
@Bean
public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder(
List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
Jackson2ObjectMapperBuilder builder = configureObjectMapper();
customize(builder, customizers);
return builder;
}
private void customize(Jackson2ObjectMapperBuilder builder,
List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
for (Jackson2ObjectMapperBuilderCustomizer customizer : customizers) {
customizer.customize(builder);
}
}
private Jackson2ObjectMapperBuilder configureObjectMapper() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
List<String> activeProfiles = asList(env.getActiveProfiles());
if (activeProfiles.contains(SPRING_PROFILE_DEVELOPMENT)) {
builder.featuresToEnable(SerializationFeature.INDENT_OUTPUT);
}
return builder;
}
}
コンテキストを提供するために、このクラスは、REST= ControllerAdviceや上記のような些細な機能など、多くのことを自動構成するサービス用の独自のSpring Starterプロジェクトにあります。
したがって、私の目標は、ブートまたは他のパッケージによって提供される構成をオーバーライドするのではなく、ジャクソン構成を拡張することです。
Spring Bootによって既に事前構成されているJackson ObjectMapper
をカスタマイズするために、これを行うことができました(ここの例は、カスタムデシリアライザーを追加することです)。
構成クラス:
@SpringBootConfiguration
public class Application {
@Autowired
private BigDecimalDeserializer bigDecimalDeserializer;
...
@Bean
public Jackson2ObjectMapperBuilderCustomizer addCustomBigDecimalDeserialization() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.deserializerByType(BigDecimal.class, bigDecimalDeserializer);
}
};
}
...
}
そして、私のカスタムデシリアライザー、Springでどのように取得されるかを示します。
@Component
public class BigDecimalDeserializer extends StdDeserializer<BigDecimal> {
public BigDecimalDeserializer() {
super(BigDecimal.class);
}
@Override
public BigDecimal deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
...
}
...
}
それはあなたが何をしようとしているかに依存します。
デフォルトで実行されるものに加えていくつかのカスタマイズを行いたい場合は、独自のJackson2ObjectMapperBuilderCustomizer
実装し、Beanとして公開します。あなたが現在持っているのは、これのより複雑なバージョンです。カスタマイザを挿入してから自分で呼び出すのではなく、独自のカスタマイザBeanを作成するだけで、Bootがそれを呼び出します。
完全に制御し、Bootのすべてのカスタマイズをオフにする場合は、Jackson2ObjectMapperBuilder
またはObjectMapper
Beanを使用して、必要に応じて構成します。このビルダーは、Spring Data RESTなどの他のコンポーネントによって作成されたObjectMappersの構成にも使用されるため、ビルダーアプローチが推奨されます。
コードを見て、一歩後退すると、プロファイル固有の構成ファイル(application-dev.properties
)Jacksonの出力のインデントを有効にします。詳細については、こちらをご覧ください こちら 。
ObjectMapper
Beanを作成するだけです:
@Bean
ObjectMapper objectMapper() {
return Jackson2ObjectMapperBuilder
.json()
.featuresToEnable(MapperFeature.DEFAULT_VIEW_INCLUSION)
.build();
}