In my @JsonTest, the autowired ObjectMapper ignores my @Configuration. Using full @SpringBootTest instead avoids the problem.

This defeats the purpose of @JsonTest.

Various older posts on StackOverflow seem to imply it has worked correctly in the past. I am using spring-boot-starter-parent 2.7.2 with Kotlin and jackson-module-kotlin

My test:

      @JsonTest
      internal class JacksonConfigTest : FreeSpec() {
          override fun extensions() = listOf(SpringExtension)

          @Autowired
          private lateinit var objectMapper: ObjectMapper

          init {
              "Reads null list as empty list" {
                  val src = """
                          {
                              "listField": null
                          }
                      """.trimIndent()

                  val parsed = objectMapper.readValue(src, DummyClass::class.java)

                  parsed.listField shouldNotBe null
                  parsed.listField should beEmpty()
              }
          }
      }

      class DummyClass(
          val listField: List<String> = emptyList()
      )

My config:

      @Configuration
      class JacksonConfig {

          @Bean
          fun objectMapper(): ObjectMapper {
              return JsonMapper.builder()
                  .addModule(
                      KotlinModule.Builder()
                          .enable(KotlinFeature.StrictNullChecks)
                          .enable(KotlinFeature.NullToEmptyCollection)
                          .build()
                  )
                  .addModule(JavaTimeModule())
                  .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
                  .serializationInclusion(JsonInclude.Include.NON_NULL)
                  .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
                  .build()
          }

      }

Comment From: wilkinsona

This is working as designed. As described in the documentation, if you want JacksonConfig to be applied you should @Import it.