一 概述
可以通过JSONType对枚举类型返回字符串。
二 相关源码
package com.alibaba.fastjson.annotation;
import com.alibaba.fastjson.PropertyNamingStrategy;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializeFilter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface JSONType {
boolean asm() default true;
String[] orders() default {};
String[] includes() default {};
String[] ignores() default {};
SerializerFeature[] serialzeFeatures() default {};
Feature[] parseFeatures() default {};
boolean alphabetic() default true;
Class<?> mappingTo() default Void.class;
Class<?> builder() default Void.class;
String typeName() default "";
String typeKey() default "";
Class<?>[] seeAlso() default {};
//自定义的枚举序列化器
Class<?> serializer() default Void.class;
Class<?> deserializer() default Void.class;
//将枚举类转成普通的JavaBean处理
boolean serializeEnumAsJavaBean() default false;
PropertyNamingStrategy naming() default PropertyNamingStrategy.CamelCase;
Class<? extends SerializeFilter>[] serialzeFilters() default {};
}
源码还不是很理解,待续...
二 相关内容的使用
在指定枚举类上使用JSONType注解
@JSONType(serializeEnumAsJavaBean = true,serializer = EnumBaseSerializer.class)
public enum PaySceneEnums {
}
自定义序列化器 EnumBaseSerivalier.java
public class EnumBaseSerializer implements ObjectSerializer {
@Override
public void write(JSONSerializer jsonSerializer, Object o, Object filedName, Type filedType, int i) throws IOException {
//获取输出
SerializeWriter out = jsonSerializer.out;
//类类型判断
if(o instanceof PaySceneEnums){
out.writeEnum((Enum<?>) o );
}
}
}
有些内容还不是特别理解,待续...