枚举类:
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; /** * Created by Administrator on 2017/1/9. */ public enum TestEnum { A(1,"1"), B(2,"2"); private int code; private String description; private TestEnum(int code, String description){ this.code = code; this.description = description; } @JsonCreator public static TestEnum getItem(int code){ for(TestEnum item : values()){ if(item.getCode() == code){ return item; } } return null; } @JsonValue public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
实例类:
public static class TestEnums{ int code =1; TestEnum testEnum = TestEnum.B; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public TestEnum getTestEnum() { return testEnum; } public void setTestEnum(TestEnum testEnum) { this.testEnum = testEnum; } }
方案:
利用 @JsonCreator 与 @JsonValue 注解:
JsonCreator :反序列化时的 初始化函数,入参为 对应该枚举的 json值
JsonVale:序列化时 枚举对应生成的值
测试类:
@org.junit.Test public void enumJsonTest(){ TestEnums testEnums = new TestEnums(); String json = JsonUtil.toJson(testEnums); System.out.println(json); TestEnums target = JsonUtil.toObject(json,TestEnums.class); System.out.println(""); }
输出:
{"code":1,"testEnum":2}