ObjectMapperBean doesn't remove `is` of `is-getter` on Spring Boot 3.1

37 Views Asked by At
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
    enum class TestEnumWithIsGetter(
        @get:JsonProperty("id") val id: Int,
        @get:JsonProperty("name") val label: String
    ) {
        A(1, "A"),
        B(2, "B"),
        C(3, "C");

        fun isA() = this == A
        fun isB() = this == B
        fun isC() = this == C
        fun getLabelString() = this.label
    }

@SpringJUnitConfig(
    classes = [
        JacksonAutoConfiguration::class,
    ]
)
class JacksonTest {
    @Autowired
    lateinit var objectMapper: ObjectMapper

    @Test
    fun serializeEnumWithIsGetter(softly: BDDSoftAssertions) {
        val case = TestEnumWithIsGetter.C
        println(objectMapper.writeValueAsString(case))
        println(
            ObjectMapper()
                .writeValueAsString(case)

        )
       // result
       // {"labelString":"C","isA":false,"isB":false,"isC":true,"id":3,"name":"C"}
       // {"labelString":"C","a":false,"b":false,"c":true,"id":3,"name":"C"}
    }
}

When spring boot 2.7 defaultObjectMapper bean write {"labelString":"C","a":false,"b":false,"c":true,"id":3,"name":"C"}

but after migrate to 3.1 defaultObjectMapper bean write {"labelString":"C","isA":false,"isB":false,"isC":true,"id":3,"name":"C"}

However if use new ObjectMapper on Spring boot 3.1, then write {"labelString":"C","a":false,"b":false,"c":true,"id":3,"name":"C"}

I think spring config doesn't remove "is" of is-getter

Is there any config changed?

And also I want to know about solution to write to {"labelString":"C","a":false,"b":false,"c":true,"id":3,"name":"C"}

0

There are 0 best solutions below