问题记录
将缓存的数据,反序列化为Bean,提示Cannot deserialize instance of 'RiskLevelEnum' out of START_OBJECT token
。
无法从令牌中反串行化 “RiskLevelEnum” START_OBJECT实例,JSON数据无法反序列化RiskLevelEnum枚举。
问题解决
既然不能序列化,那我们自己定义反序列化器,步骤如下:
- 自定义反序列化器
public class RiskLevelEnumDeserializer extends JsonDeserializer<RiskLevelEnum> {
@Override
public RiskLevelEnum deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
TreeNode node = parser.getCodec().readTree(parser);
String enName = StrUtil.toString(node.get("enName"));
if (StrUtil.isBlank(enName)) {
return null;
}
for (RiskLevelEnum value : RiskLevelEnum.values()) {
if (Objects.equals(value.getEnName(), enName)) {
return value;
}
}
return null;
}
}
- 添加
@JsonDeserialize
注解到指定属性,使用自定义的反序列化器
@JsonDeserialize(using = RiskLevelEnumDeserializer.class)
private RiskLevelEnum riskLevel;