
Jackson库中枚举的JSON序列化和反序列化
Jackson 1.9.9 版本及以上版本处理枚举的JSON序列化相对简单,可以使用@JsonValue注解实现序列化为JSON字符串。然而,反序列化则需要额外处理。
独立解决方案:利用@JsonCreator和@JsonValue注解
一种常用的方法是结合@JsonCreator和@JsonValue注解:
public enum Event {
FORGOT_PASSWORD("forgot password");
private static Map namesMap = new HashMap<>();
static {
namesMap.put("forgot password", FORGOT_PASSWORD);
}
@JsonCreator
public static Event forValue(String value) {
return namesMap.get(value.toLowerCase());
}
@JsonValue
public String toValue() {
return value;
}
private final String value;
Event(String value) {
this.value = value;
}
}
此方案通过namesMap映射JSON字符串和枚举值,@JsonCreator注解的forValue方法负责反序列化,@JsonValue注解的toValue方法负责序列化。
解决方案的不足
这种独立解决方案需要在每个枚举类中重复编写类似代码,导致代码冗余,不利于维护。 更通用的解决方案,例如自定义序列化器或反序列化器,可以避免这种重复。










