Jackson: Serialize and deserialize enum values as integers

Jackson: Serialize and deserialize enum values as integers

To serialize and deserialize enum values as integers using Jackson, you can use Jackson's @JsonFormat annotation and configure a custom serializer and deserializer for your enum. Here's how you can do it:

Suppose you have an enum like this:

public enum Status { PENDING(0), APPROVED(1), REJECTED(2); private final int value; Status(int value) { this.value = value; } public int getValue() { return value; } } 
  1. Custom Enum Serializer:

    You need to create a custom serializer for your enum that converts enum values to integers. Here's an example of a custom serializer:

    import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; public class StatusSerializer extends JsonSerializer<Status> { @Override public void serialize(Status status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeNumber(status.getValue()); } } 
  2. Custom Enum Deserializer:

    You also need to create a custom deserializer to convert integers back to enum values. Here's an example of a custom deserializer:

    import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import java.io.IOException; public class StatusDeserializer extends JsonDeserializer<Status> { @Override public Status deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { int value = jsonParser.getIntValue(); for (Status status : Status.values()) { if (status.getValue() == value) { return status; } } throw new IllegalArgumentException("Invalid Status value: " + value); } } 
  3. Annotate the Enum:

    Apply the @JsonFormat annotation to your enum class to specify the custom serializer and deserializer:

    import com.fasterxml.jackson.annotation.JsonFormat; @JsonFormat(shape = JsonFormat.Shape.OBJECT) public enum Status { // Enum values and methods as before } 
  4. Usage:

    Now, you can use Jackson to serialize and deserialize your enum values as integers:

    import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); // Serialize enum to JSON String json = objectMapper.writeValueAsString(Status.APPROVED); System.out.println("Serialized: " + json); // Deserialize JSON to enum Status status = objectMapper.readValue("1", Status.class); System.out.println("Deserialized: " + status); } } 

With these configurations, Jackson will serialize the enum values as integers and deserialize integers back to enum values correctly.


More Tags

ionic4 stdin eol vectormath text-size linear-interpolation instagram-api notifications jquery-select2-4 segue

More Java Questions

More Chemical reactions Calculators

More Investment Calculators

More Everyday Utility Calculators

More Cat Calculators