<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
接口
public interface ISetupStatusInfo {
List<SetupStatus> nextList();
Boolean isFirst();
Boolean isLast();
}
public interface ISetupStatusProcess {
/**
*
* @return
*/
SetupStatus refuse();
/**
* 状态转移失败返回null
*
* @param name
* @return
*/
SetupStatus next(String name);
}
枚举实现
@JSONType(serializeEnumAsJavaBean = true)
public enum SetupStatus implements ISetupStatusInfo, ISetupStatusProcess {
EDIT(0, "EDIT", "编辑中") {
@Override
public List<SetupStatus> nextList() {
return Arrays.asList(FIRST_TRAIL);
}
@Override
public Boolean isFirst() {
return true;
}
@Override
public SetupStatus refuse() {
return EDIT;
}
}, FIRST_TRAIL(1, "FIRST_TRAIL", "初审") {
@Override
public List<SetupStatus> nextList() {
return Arrays.asList(EXPERT, FINAL_TRAIL);
}
@Override
public SetupStatus refuse() {
return EDIT;
}
}, EXPERT(2, "EXPERT", "专家补充意见", false) {
@Override
public List<SetupStatus> nextList() {
return Arrays.asList(FINAL_TRAIL);
}
}, FINAL_TRAIL(3, "FINAL_TRAIL", "公益委员会/理事会/理事长审核") {
@Override
public List<SetupStatus> nextList() {
return Arrays.asList(PASS);
}
@Override
public SetupStatus refuse() {
return EDIT;
}
}, PASS(4, "PASS", "项目通过", false) {
@Override
public List<SetupStatus> nextList() {
return Arrays.asList(SIGN);
}
}, SIGN(5, "SIGN", "协议签署", false) {
@Override
public List<SetupStatus> nextList() {
return Arrays.asList(ACTIVE);
}
}, ACTIVE(6, "ACTIVE", "启动") {
@Override
public List<SetupStatus> nextList() {
return null;
}
@Override
public Boolean isLast() {
return true;
}
};
private int code;
private String name;
private String nameCn;
private boolean canRefuse;
SetupStatus(int code, String name, String nameCn) {
this.code = code;
this.name = name;
this.nameCn = nameCn;
this.canRefuse = true;
}
SetupStatus(int code, String name, String nameCn, boolean canRefuse) {
this.code = code;
this.name = name;
this.nameCn = nameCn;
this.canRefuse = canRefuse;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNameCn() {
return nameCn;
}
public void setNameCn(String nameCn) {
this.nameCn = nameCn;
}
public boolean isCanRefuse() {
return canRefuse;
}
public void setCanRefuse(boolean canRefuse) {
this.canRefuse = canRefuse;
}
public static SetupStatus getFromCode(Integer code) {
if (code == null) {
return null;
}
for (SetupStatus status : values()) {
if (status.code == code) {
return status;
}
}
throw new IllegalArgumentException("unknown SetupStatus enumeration code:" + code);
}
public static SetupStatus getFromName(String name) {
if (name == null) {
return null;
}
for (SetupStatus status : values()) {
if (status.name.equals(name)) {
return status;
}
}
return null;
}
@Override
public Boolean isFirst() {
return false;
}
@Override
public Boolean isLast() {
return false;
}
@Override
public SetupStatus refuse() {
return null;
}
@Override
public SetupStatus next(String name) {
SetupStatus status = getFromName(name);
return name != null && this.nextList().contains(status) ? status : null;
}
@Override
public String toString() {
return "SetupStatus{" + "code=" + code + ", name='" + name + '\'' + ", nameCn='" + nameCn + '\'' + ", canRefuse=" + canRefuse + '}';
}
public static void main(String[] args) {
SerializeConfig serializeConfig = new SerializeConfig();
System.out.println("edit class:" + EDIT.getClass());
System.out.println("setupStatus class:" + SetupStatus.class);
//配置
serializeConfig.configEnumAsJavaBean(EDIT.getClass());
serializeConfig.configEnumAsJavaBean(SetupStatus.class);
//输出
System.out.println("通过枚举值getClass配置的枚举值可以使用javaBean序列化函数:"+JSON.toJSONString(EDIT, serializeConfig));
System.out.println("通过枚举类.class配置的枚举值不可以可以使用javaBean序列化函数:"+JSON.toJSONString(FINAL_TRAIL, serializeConfig));
}
}
输出
edit class:class com.alijijinhui.enums.project.SetupStatus$1
setupStatus class:class com.alijijinhui.enums.project.SetupStatus
通过枚举值getClass配置的枚举值可以使用javaBean序列化函数:{"canRefuse":true,"code":0,"declaringClass":"com.alijijinhui.enums.project.SetupStatus","first":true,"last":false,"name":"EDIT","nameCn":"编辑中"}
通过枚举类.class配置的枚举值不可以可以使用javaBean序列化函数:"FINAL_TRAIL"
应该是实现接口后的枚举值成了内部类,类名不同,无法根据枚举类直接获取设置好的javaBeanSerializer
接口
枚举实现
输出
应该是实现接口后的枚举值成了内部类,类名不同,无法根据枚举类直接获取设置好的javaBeanSerializer