SpringBoot下使用Jackson实现布尔值与Status枚举序列化/反序列化失败求助
错误根因
- 你之前写的
@JsonCreator静态工厂方法参数上加了@JsonProperty("enabled"),该配置会让Jackson期望接收的是一个包含enabled字段的JSON对象,而你的请求中enabled字段直接传入布尔值,因此触发类型不匹配错误。 - 单独使用
@JsonValue默认仅支持序列化时输出布尔值,Jackson默认不会自动将布尔值反向映射为枚举值,因此反序列化报错。
可行解决方案
直接修改Status枚举的注解配置即可,无需额外自定义序列化/反序列化器,适配Jackson 2.13.0版本:
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; public enum Status { DISABLED(false), ENABLED(true); private final boolean enabled; Status(boolean value){ this.enabled = value; } // 序列化时输出对应布尔值 @JsonValue public boolean value() { return this.enabled; } // 反序列化时直接将传入的布尔值映射为枚举 @JsonCreator public static Status forValue(Boolean status) { if (status == null) { return null; } return status ? ENABLED : DISABLED; } }
验证说明
修改完成后,请求中enabled: true会自动映射为Status.ENABLED,enabled: false映射为Status.DISABLED,接口返回序列化时也会输出布尔值,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Sajin Surendran
相关产品推荐
相关产品推荐

