You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java枚举JSON序列化:如何在指定场景返回shortName而非fullName

方案1:DTO层直接处理(最推荐,侵入性最低)

你当前的需求仅针对单条查询的FullDTO生效,无需修改全局序列化规则,直接在DTO转换环节处理即可:

  1. 将FullDTO中状态字段的类型从BusinessCustomersStatus枚举改为String
  2. 在Mapper转换时主动取枚举的shortName赋值
    如果使用MapStruct作为Mapper组件,可以直接通过表达式配置:
@Mapping(target = "status", expression = "java(entity.getStatus().getShortName())")
FullDTO toFullDTO(BusinessCustomers entity);

如果是手动写Mapper转换逻辑,直接调用setter赋值即可:

dto.setStatus(entity.getStatus().getShortName());

该方案完全不影响原有分页查询的序列化逻辑,两个场景的返回规则完全隔离,维护成本最低。


方案2:自定义字段序列化(保留DTO枚举类型)

如果不想修改FullDTO的字段类型,仍然要保留枚举类型,可以通过Jackson的@JsonSerialize注解给单个字段指定自定义序列化规则:

  1. 编写枚举的shortName序列化器:
public class StatusShortNameSerializer extends StdSerializer<BusinessCustomersStatus> {
    public StatusShortNameSerializer() {
        super(BusinessCustomersStatus.class);
    }

    @Override
    public void serialize(BusinessCustomersStatus value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeString(value.getShortName());
    }
}
  1. 在FullDTO的状态字段上绑定序列化器:
@JsonSerialize(using = StatusShortNameSerializer.class)
private BusinessCustomersStatus status;

该方案仅对该DTO的status字段生效,不会改动全局序列化规则,也不会影响其他场景的枚举返回值。


方案3:JsonView多视图管控(适合大量多场景序列化需求)

如果项目中存在大量需要区分枚举返回值的场景,可以通过@JsonView做统一的视图管控:

  1. 定义视图标识类:
public class View {
    // 分页列表视图
    public interface ListView {}
    // 单条详情视图
    public interface DetailView {}
}
  1. 修改枚举类,移除全局的@JsonValue注解,给两个字段分别绑定视图:
public enum BusinessCustomersStatus {
    // 原有枚举值不变
    A("active", "Active"),
    O("onboarding", "Onboarding"),
    // 其余枚举值省略

    @Getter
    @JsonView(View.DetailView.class)
    private String shortName;

    @Getter
    @JsonView(View.ListView.class)
    private String fullName;

    // 构造方法、反序列化逻辑保持不变
}
  1. 给对应接口绑定视图:分页列表接口加@JsonView(View.ListView.class),单条详情接口加@JsonView(View.DetailView.class)即可。

内容的提问来源于stack exchange,提问作者Peter Penzov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:27:03