jackson 枚举的示例化:不允许从序数进行特殊化

rslzwgfq  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(52)

我有一个问题与序列化枚举。我希望反序列化只对枚举中指定的值(01,02,03)有效,而不对序号有效。这可能会很令人困惑,如下面的例子所示。是否有一些选项或配置?我在spring使用Jackson,我第一次注意到这个行为是在3.1.x版本中。
代码示例:

fun main(args: Array<String>) {
 val objectMapper = ObjectMapper().registerKotlinModule()
 println(objectMapper.readValue("{ \"value\": \"01\" }}", TestClass::class.java))
 println(objectMapper.readValue("{ \"value\": \"1\" }}", TestClass::class.java)) //this should fail
}

data class TestClass(val value: TestEnum)
enum class TestEnum(@JsonValue val value: String) {
 FIRST("01"),
 SECOND("02"),
 THIRD("03")
}

输出量:

TestClass(value=FIRST)
TestClass(value=SECOND)

使用的依赖项:

implementation "com.fasterxml.jackson.core:jackson-core:2.15.2"
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2'
g2ieeal7

g2ieeal71#

配置选项:

.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, true)

解决了这个问题。

相关问题