It also registers a JavaTimeModule to handle Java 8 date and time types. + * */ @Configuration public class ObjectMapperConfig { @Bean - public ObjectMapper objectMapper(JsonFactory jsonFactory) { - ObjectMapper mapper = - new ObjectMapper(jsonFactory) - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .registerModule(new JavaTimeModule()); - SimpleModule module = new SimpleModule(); - module.addSerializer(ObjectId.class, new ObjectIdSerializer()); - mapper.registerModule(module); - return mapper; - } - - @Bean - public JsonFactory jsonFactory() { - return new JsonFactory(); + public Jackson2ObjectMapperBuilderCustomizer objectMapperBuilderCustomizer() { + return (Jackson2ObjectMapperBuilder builder) -> { + builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + builder.modulesToInstall(new JavaTimeModule()); + SimpleModule module = new SimpleModule(); + module.addSerializer(ObjectId.class, new ObjectIdSerializer()); + builder.modulesToInstall(module); + }; } @Bean diff --git a/mflix/server/java-spring/src/main/resources/application.properties b/mflix/server/java-spring/src/main/resources/application.properties index 1e89e1b..d91141e 100644 --- a/mflix/server/java-spring/src/main/resources/application.properties +++ b/mflix/server/java-spring/src/main/resources/application.properties @@ -36,6 +36,9 @@ logging.logback.rollingpolicy.max-file-size=5MB logging.logback.rollingpolicy.max-history=5 # Jackson Configuration (JSON serialization) +# This app uses Jackson 2 (custom ObjectId serializer, spring.jackson2.* config below); +# Spring Boot 4.1 defaults HTTP message conversion to Jackson 3 unless pinned here. +spring.http.converters.preferred-json-mapper=jackson2 spring.jackson2.default-property-inclusion=non_null # API Documentation (Swagger/OpenAPI)