Jackson: serializar y deserializar valores de enumeración como enteros

Considere la siguiente enumeración y clase:

public enum State {
    ON,
    OFF,
    UNKNOWN
}

public class Machine {
    String name;
    int numCores;
    State state;

    public Machine(String name, int numCores, State state) {
        this.name = name;
        this.numCores = numCores;
        this.state = state;
    }
}

Y considere la siguiente función principal:

public static void main(String args[]) {
    Machine m = new Machine("Machine 1", 8, OFF);
    ObjectMapper mapper = new ObjectMapper();
    String machineAsJsonString = mapper.writeValueAsString(m);
    System.out.println(machineAsJsonString);
}

Actualmente, el resultado de este main es:

{"name" : "Machine 1", "numCores" : 8, "state" : "OFF"}

Este resultado no es bueno para mí, ya que en lugar de la cadena"OFF" parastateMe gustaría que fuera1, que es el valor ordinal deOFF en la enumeraciónState.

Entonces, el resultado real que quiero obtener es:

{"name" : "Machine 1", "numCores" : 8, "state" : 1}

¿Hay alguna forma elegante de hacer que se comporte de esta manera?

Respuestas a la pregunta(5)

Su respuesta a la pregunta