已编译Enum java的序列化

问题描述 投票:0回答:1

我有一个枚举,它取自导入到我的项目中的编译库。当包含此枚举的对象作为 api 响应发送时,它包含枚举常量,例如:

"attestation": "DIRECT"

我希望它是:

"attestation": "direct"

不幸的是,我无法更改枚举类文件并覆盖 toString 方法或执行任何类似的操作。

所以我为它编写了一个自定义序列化器:

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.writeStartObject();
        jsonGenerator.writeFieldName("attestation");
        jsonGenerator.writeString(acp.getValue());
        jsonGenerator.writeEndObject();
    }
}

但现在我得到的回复是:

    "attestation": {
      "attestation": "direct"
    },

有没有办法让物体变平?

java serialization enums jackson
1个回答
0
投票

无需创建自定义序列化器,您可以使用特定的注释:

enum Attestation {

    @JsonProperty("direct")
    DIRECT;

}
© www.soinside.com 2019 - 2024. All rights reserved.