alibaba / alibaba/fastjson2

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

Open
#2,882 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Java
Stars
4.4k
Forks
613
Avg merge
1d 22h
Merged PRs (30d)
6

Description

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

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

```java
@JSONType(writeEnumAsJavaBean = true)
// @JsonFormat(shape = JsonFormat.Shape.OBJECT)
public interface EnumFormatObject {

V getValue();

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

```java
public enum AccountStatus implements EnumFormatObject {

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. 在所有子枚举上手动一一增加注解

#### 附加信息

Contributor guide

Open the contributing guide

Research direction

Start by tracing serialization handling for @JSONType(writeEnumAsJavaBean = true), focusing on enum serialization and annotation lookup. Verify how annotations on an implemented interface are currently treated. Done means an enum implementing EnumFormatObject can serialize as an object with value and desc without declaring @JSONType itself, with coverage for the shown AccountStatus case.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.