Jackson:将枚举值序列化和反序列化为整数
考虑以下枚举和类:
public enum State { ON,
OFF,
UNKNOWN
}
public class Machine {
String name;
int numCores;
State state;
public Machine(String name, int numCores, State state) {
this.name = name;
this.numCores = numCores;
this.state = state;
}
}
并考虑以下主要功能:
public static void main(String args[]) { Machine m = new Machine("Machine 1", 8, State.OFF);
ObjectMapper mapper = new ObjectMapper();
String machineAsJsonString = mapper.writeValueAsString(m);
System.out.println(machineAsJsonString);
}
当前,该主输出为:
{"name" : "Machine 1", "numCores" : 8, "state" : "OFF"}
这种输出并不适合我,因为除了字符串"OFF"
的state
,我想它是1
,这是序号值OFF
在枚举State
。
{"name" : "Machine 1", "numCores" : 8, "state" : 1}
有一些优雅的方法可以使其表现为这种方式吗?
回答:
它应该通过指定JsonValue
映射器来工作。
public enum State { ON,
OFF,
UNKNOWN;
@JsonValue
public int toValue() {
return ordinal();
}
}
如@JsonValue
注解的Javadoc所述,这也适用于反序列化:
注意:当用于Java枚举时,一个附加功能是带注释的方法返回的值也被视为要反序列化的值,而不仅仅是序列化为JSON字符串的值。这是可能的,因为Enum值的集合是恒定的,并且可以定义映射,但是通常不能对POJO类型执行此操作。因此,这不用于POJO反序列化
以上是 Jackson:将枚举值序列化和反序列化为整数 的全部内容, 来源链接: utcz.com/qa/427850.html