Jackson @JsonValue 和 @JsonCreator 处理枚举序列化与反序列化
可以使用@JsonValue和@JsonCreator注解自定义枚举的序列化与反序列化需求。
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public enum Status {
ACTIVE("A"), INACTIVE("I"), PENDING("P");
private final String code;
Status(String code) {
this.code = code;
}
@JsonValue
public String getCode() {
return code;
}
@JsonCreator
public static Status fromCode(String code) {
for (Status status : Status.values()) {
if (status.getCode().equals(code)) {
return status;
}
}
throw new IllegalArgumentException("Unknown code: " + code);
}
}
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// 序列化
String json = mapper.writeValueAsString(Status.ACTIVE);
System.out.println("Serialized: " + json); // 输出:"A"
// 反序列化
Status status = mapper.readValue("\"I\"", Status.class);
System.out.println("Deserialized: " + status); // 输出:INACTIVE
}
}
其中@JsonValue和@JsonCreator注解分别用于序列化和反序列化。
@JsonValue注解用于指示应该被序列化为 JSON 对象的值,可作用于方法或字段。@JsonCreator注解用于指示用于创建对象实例的构造函数或工厂方法。
浙公网安备 33010602011771号