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

无法修改第三方编译Enum时,如何扁平化其JSON序列化结果?

解决方案

你的问题出在自定义序列化器额外生成了一层对象结构——你在序列化方法里调用了writeStartObject()和writeEndObject(),还手动添加了"attestation"字段,这就导致外层的"attestation"键对应的值变成了嵌套对象。

只需要修改序列化器的serialize方法,直接输出Enum值的小写字符串即可,不用包裹成对象:

public class AttestationConveyancePreferenceSerializer extends StdSerializer<AttestationConveyancePreference> {

    public AttestationConveyancePreferenceSerializer() {
        this(null);
    }

    public AttestationConveyancePreferenceSerializer(Class<AttestationConveyancePreference> t) {
        super(t);
    }

    @Override
    public void serialize(AttestationConveyancePreference acp, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        // 直接输出小写的字符串值,无需生成对象结构
        jsonGenerator.writeString(acp.getValue().toLowerCase());
    }
}

之后在API响应对象的对应Enum字段上添加@JsonSerialize(using = AttestationConveyancePreferenceSerializer.class)注解,序列化时就会直接把Enum转换成小写字符串,得到你想要的结果:

"attestation": "direct"

如果需要全局生效,也可以在Jackson的ObjectMapper中注册这个序列化器,避免每个字段都加注解:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(AttestationConveyancePreference.class, new AttestationConveyancePreferenceSerializer());
mapper.registerModule(module);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:02:22