首先我们有一个Student类:
package com.dusk.json;
/**
* Created by dushangkui on 2017/5/3.
*/
public class Student {
private String name;
private SexEnum sex;
public Student(String name, SexEnum sex) {
this.name = name;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SexEnum getSex() {
return sex;
}
public void setSex(SexEnum sex) {
this.sex = sex;
}
}
其中SexEnum是一个关于性别的枚举:
package com.dusk.json;
/**
* Created by dushangkui on 2017/5/3.
*/
public enum SexEnum {
Female(1,"女"),
Male(2,"男");
private int code;
private String desc;
private SexEnum(int code, String desc){
this.code=code;
this.desc=desc;
}
public int getCode() {
return code;
}
}
我们看场景类:
package com.dusk.json;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
/**
* Created by dushangkui on 2017/5/3.
*/
public class Client {
@Test
public void test() throws JsonProcessingException {
Student stu1 = new Student("张三", SexEnum.Male);
Student stu2 = new Student("小丽", SexEnum.Female);
ObjectMapper objectMapper = new ObjectMapper();
System.out.println(objectMapper.writeValueAsString(stu1));
System.out.println(objectMapper.writeValueAsString(stu2));
}
}
我们可以看到转换结果:
从上面我们看到枚举转换成了枚举类型的项名。如果我们想要转换成枚举的code怎么做?
修改Student类:
package com.dusk.json;
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;
/**
* Created by dushangkui on 2017/5/3.
*/
public class Student {
private String name;
private SexEnum sex;
public Student(String name, SexEnum sex) {
this.name = name;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SexEnum getSex() {
return sex;
}
public void setSex(SexEnum sex) {
this.sex = sex;
}
@JsonSetter
public void sex(int sex) {
if(sex==1)
this.sex = SexEnum.Female;
else
this.sex = SexEnum.Male;
}
@JsonGetter
public int sex() {
return sex.getCode();
}
}
可以看到我们新增了两个方法并且分别使用了JsonSetter和JsonGetter注解,运行:
我们看到枚举类型被映射成了他们对应的code。