Search code examples
javaserializationenumsjackson

Serialization of compiled Enum java


I have an enum that's taken from a compiled library I imported into my project. When an object containing this enum is sent as an api response it contains the enum constant, like:

"attestation": "DIRECT"

I would like it as:

"attestation": "direct"

unfortunatly I can't change the enum class file and override the toString method or do anything similar.

So I've written a custom serializer for it:

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();
    }
}

but now in the response I get:

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

is there a way to flatten the object?


Solution

  • Just write the value directly without creating an object:

        @Override
        public void serialize(AttestationConveyancePreference acp, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeString(acp.getValue());
        }