使用 Jackson 使用静态工厂方法反序列化枚举
Deserialising an Enum with a static factory method using Jackson
如果无法更改枚举的源代码,如何使用静态工厂方法反序列化枚举?
例如,如何将 Jackson 配置为使用 MyEnum.fromKey()
进行反序列化?
public enum MyEnum {
FOO("key1"),
BAR("key2");
private final String key;
MyEnum(String key) {
this.key = key;
}
public static final MyEnum fromKey(String key) {
// lookup by MyEnum.key
}
使用 Jackson mixin 提供一个 @JsonCreator
委托给 MyEnum.fromKey()
:
public enum MyEnumMixIn {
/* no values */;
@JsonCreator
public static MyEnum fromKey(String key) {
return MyEnum.fromKey(key);
}
}
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(MyEnum.class, MyEnumMixIn.class);
如果无法更改枚举的源代码,如何使用静态工厂方法反序列化枚举?
例如,如何将 Jackson 配置为使用 MyEnum.fromKey()
进行反序列化?
public enum MyEnum {
FOO("key1"),
BAR("key2");
private final String key;
MyEnum(String key) {
this.key = key;
}
public static final MyEnum fromKey(String key) {
// lookup by MyEnum.key
}
使用 Jackson mixin 提供一个 @JsonCreator
委托给 MyEnum.fromKey()
:
public enum MyEnumMixIn {
/* no values */;
@JsonCreator
public static MyEnum fromKey(String key) {
return MyEnum.fromKey(key);
}
}
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(MyEnum.class, MyEnumMixIn.class);