You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Jackson禁止通过枚举序号进行反序列化?

问题:Jackson枚举反序列化允许序号匹配的问题

在Spring中使用Jackson(3.1.x版本首次发现该行为)时遇到枚举反序列化问题:希望仅允许通过枚举中指定的字符串值(01、02、03)进行反序列化,禁止使用枚举序号。但当前输入"{\"value\": \"1\"}"本应反序列化失败,却被解析为SECOND枚举值,询问是否有对应配置选项。

代码示例

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)) // 此处应反序列化失败
}

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'

解决方案

方法1:配置ObjectMapper禁用枚举序号反序列化

Jackson默认允许通过枚举的序号(ordinal)反序列化,只需启用DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS特性,即可禁止该行为,让反序列化仅识别枚举@JsonValue指定的字符串值:

val objectMapper = ObjectMapper()
    .registerKotlinModule()
    .enable(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS)

配置后,输入"1"这类字符串形式的数字会触发JsonMappingException,反序列化失败,符合预期。

方法2:自定义@JsonCreator实现严格匹配

如果需要更精细的控制,可以在枚举类中添加@JsonCreator方法,仅匹配指定的字符串值:

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

 @JsonCreator
 companion object {
     @JvmStatic
     fun fromValue(value: String): TestEnum {
         return entries.firstOrNull { it.value == value }
             ?: throw IllegalArgumentException("无效的枚举值: $value")
     }
 }
}

这种方式下,只有完全匹配01、02、03的字符串能被解析,其他值(包括"1")都会抛出异常,实现严格匹配。

Spring环境全局配置

如果是Spring项目,想要全局生效,可以通过自定义ObjectMapper Bean实现:

@Configuration
class JacksonConfig {
    @Bean
    fun objectMapper(): ObjectMapper {
        return ObjectMapper()
            .registerKotlinModule()
            .enable(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS)
    }
}

配置后,所有枚举的反序列化都会遵循规则,禁止通过序号匹配。


内容的提问来源于stack exchange,提问作者anstue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:54:51