fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[FEATURE] 支持枚举在序列化成对象时通过统一接口声明的建议

Open acexy opened this issue 1 year ago • 0 comments

请描述您的需求或者改进建议

假设项目统一要求对枚举的序列化统一为标准,格式value和desc,例如 统一的接口声明

@JSONType(writeEnumAsJavaBean = true)
// @JsonFormat(shape = JsonFormat.Shape.OBJECT)
public interface EnumFormatObject<V> {

    V getValue();

    String getDesc();
}

所有枚举需要实现接口,并不需要在子枚举类中显示的使用注解@JSONType(writeEnumAsJavaBean = true)

public enum AccountStatus implements EnumFormatObject<String> {

    NORMAL("NORMAL", "正常"),
    LOCKED("LOCKED", "锁定"),
    DELETE("DELETE", "删除");

    private final String value;
    private final String desc;

    AccountStatus(String value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    @Override
    public String getDesc() {
        return desc;
    }

    @Override
    public String getValue() {
        return value;
    }
}

这样所有的子枚举的行为已经被限定,并且看起来比较简洁,也不会因为忘记加入@JSONType(writeEnumAsJavaBean = true)而影响最后的效果,但是实际测试下来发现,必须要在子枚举类中增加@JSONType(writeEnumAsJavaBean = true)注解才可以。Jackson可以支持这种方式,所以希望Fastjson也能够支持,向父级扫描一下注解配置,然后完成这种方式的序列化。

请描述你建议的实现方案

希望在做序列化时,能过检查下父级的Fastjson的注解配置,这样可以在父级上统一子类的一些特性。

描述您考虑过的替代方案

  1. 使用Jackson
  2. 在所有子枚举上手动一一增加注解

附加信息

acexy avatar Aug 21 '24 07:08 acexy