@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"}