Skip to content

Afterburner Interferes With Options Respecting Include.NON_NULL #226

@omervk

Description

@omervk

If Afterburner (jackson-module-afterburner) is registered on an ObjectMapper before DefaultScalaModule, it interferes with (at least) how None is serialized when Include.NON_NULL is in play.

case class A(foo: Option[String] = None)
class B {
    @JsonProperty val foo: Option[String] = None
}

val objectMapper = new ObjectMapper()
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
objectMapper.registerModule(new AfterburnerModule)
objectMapper.registerModule(DefaultScalaModule)

val caseClassJson = objectMapper.writeValueAsString(A())
val objectJson = objectMapper.writeValueAsString(new B())
val anonymousObjectJson = objectMapper.writeValueAsString(new {
    @JsonProperty val foo: Option[String] = None
})

Expected:

caseClassJson == "{}"
objectJson == "{}"
anonymousObjectJson == "{}"

Actual:

caseClassJson == """{ "foo": null }"""
objectJson == """{ "foo": null }"""
anonymousObjectJson == "{}"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions