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

回到顶部