java - 反序列化 null 值以使用 Jackson 枚举
问题描述
我对 JSON 反序列化并将其映射到枚举有疑问。我从与这两个示例类似的外部 API 获取 JSON:
{
"someValue": null
}
{
"someValue": "exists"
}
我想将空值映射到一些默认枚举值。
模型对象
SomeEnum someValue;
和枚举类
public enum SomeEnum {
@JsonProperty("exists") EXISTS,
NONE;
}
对于存在,值模型类包含正确的枚举,但如果我null
从 API 获取,它仍然null
在模型中。
我尝试创建一些由 注释的方法@JsonCreator
,创建自己的枚举反序列@JsonEnumDefaultValue
化器,但这些解决方案都不适合我。有谁知道,我怎样才能将空值反序列化为一些默认枚举?
解决方案
好的,所以现在我通过创建自定义枚举反序列化器解决了这个问题。
class SomeEnumDeserializer extends StdDeserializer<SomeEnum> {
SomeEnumDeserializer() {
super(SomeEnum.class);
}
@Override
public SomeEnum getNullValue(DeserializationContext ctxt) {
return SomeEnum.NONE;
}
@Override
public SomeEnum deserialize(JsonParser p, DeserializationContext ctxt) {
// implementation here
}
并使用@JsonDeserialize 注册它:
@JsonDeserialize(using = SomeEnumDeserializer.class)
public enum SomeEnum {
// code
}
但我仍然更喜欢使用 @JsonProperty 之类的东西,但对于 null,例如 @JsonNullProperty 或类似的东西。
推荐阅读
- neo4j - 计数集合时计数不正确
- typescript - 数组查找方法错误元素隐式具有“任何”类型
- php - 如何从我需要在控制器中的 CodeIgniter 中的配置文件中获取变量
- python - 一个类的结果如何在另一个类中使用
- mysql - 如何在多个条件下加入同一张表?
- xamarin - 如何为 xamarin 表单上的按钮设置悬停?
- r - 根据定位变化的代码(带有标题)更正分散在多行上的字符串
- reactjs - 带参数的 useApi 钩子
- django - Haystack/Whoosh 将字符串转换为类似字节的对象?“不能在类似字节的对象上使用字符串模式”错误
- jmeter - JMeter 插件管理器安装问题