一、过程
- 创建枚举型接口
import com.alibaba.fastjson.annotation.JSONType;
/**
* 自定义JSON序列化枚举的接口
*/
@JSONType(serializer = EnumBaseSerializer.class)
public interface EnumBase{
Integer getId();
String getName();
}
2. 自定义枚举序列化类
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;
import com.alibaba.fastjson.serializer.SerializeWriter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
/**
* 自定义枚举JSON序列化类
*/
public class EnumBaseSerializer implements ObjectSerializer {
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.out;
if (object instanceof EnumBase) {
Map map = new HashMap<Integer,String>();
EnumBase enuma = (EnumBase) object;
map.put("id",enuma.getId());
map.put("name",enuma.getName());
out.writeString(JSON.toJSONString(map));
} else {
out.writeEnum((Enum<?>) object);
}
}
}
3. 建立测试枚举
import com.alibaba.fastjson.annotation.JSONType;
// 自定义序列化类
@JSONType(serializeEnumAsJavaBean = true,serializer = EnumBaseSerializer.class)
public enum Gender implements EnumBase{
MALE(1,"男"),
FEMALE(2,"女");
private Integer id;
private String name;
Gender(Integer id,String name){
this.id = id;
this.name = name;
}
public Integer getId(){
return this.id;
}
public String getName(){
return this.name;
}
/**
* 根据ID,返回Name
* @param id
* @return
* @throws Exception
*/
public static String getNameById(Integer id)throws Exception{
return Gender.getById(id).getName();
}
/**
* 根据ID,返回实例
* @param id
* @return
* @throws Exception
*/
public static Gender getById(Integer id)throws Exception{
//return Gender.values();
for(Gender singleEnum:Gender.values()){
if(singleEnum.getId()==id){
return singleEnum;
}
}
throw new Exception(Gender.class.getName()+" 未知枚举项: " + id);
}
}
4.自定义测试类2
import lombok.Data;
@Data
public class TestToJson {
private String name = "测试";
private Gender gender = Gender.FEMALE;
private Gender[] genders = Gender.values();
}
5.Main测试类
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String args[]){
try{
System.out.println("Hello World!");
System.out.println("id 1= " + Gender.getNameById(1));
System.out.println("id 2= " + Gender.getNameById(2));
Gender g = Gender.MALE;
System.out.println("JSON ENUM: " + JSON.toJSONString(Gender.values()));
System.out.println("JSON CLASS: " + JSON.toJSONString(new TestToJson()));
}catch (Exception ex){
System.out.println(ex.getMessage());
}
}
}
-
测试可以通过。