2012-09-04 27 views
11

¿Cómo puedo asignar un objeto JSON simple {"status" : "successful"} automáticamente a mi Java Enum dentro de JAX-RS?Cómo mapear manualmente los campos Enum en JAX-RS

public enum Status { 
    SUCESSFUL ("successful"), 
    ERROR ("error"); 

    private String status; 

    private Status(String status) { 
     this.status = status; 
    } 
} 

Si necesita más información, no dude en preguntar :)

Respuesta

12

Las siguientes anotaciones JAXB deberían hacerlo. (He probado usando Jettison pero no he probado otros proveedores):

@XmlType(name = "status") 
@XmlEnum 
public enum Status { 
    @XmlEnumValue(value = "successful") 
    SUCESSFUL, 
    @XmlEnumValue(value = "error") 
    ERROR; 
} 
+0

Gracias por su respuesta. Estoy usando las características estándar de JAX-RS y el servidor de aplicaciones decide qué implementación usará. En mi caso es JBoss 7.1 y usa jackson automáticamente (supongo). ¿Sabes si hay una forma de forzar a jBoss a usar otro proveedor? ¿O permite que jBoss use 'XmlEnum' y' XmlEnumValue'? –

+0

Es posible que 'Jackson' se comporte de manera similar a Jettison con respecto a las anotaciones de JAXB; simplemente no tuve tiempo de probarlo. Por cierto, si no estaba claro, las anotaciones anteriores son JAXB estándar, que las implementaciones de JAX-RS deben seguir. –

+0

Desafortunadamente no funciona. Pero de todos modos lo resolveré y lo publicaré aquí ... –

2

Esto podría ayudar a

@Entity 
public class Process { 

    private State state; 

    public enum State { 
    RUNNING("running"), STOPPED("stopped"), PAUSED("paused"); 

    private String value; 

    private State(String value) { 
     this.value = value; 
    } 

    @JsonValue 
    public String getValue() { 
     return this.value; 
    } 

    @JsonCreator 
    public static State create(String val) { 
     State[] states = State.values(); 
     for (State state : states) { 
     if (state.getValue().equalsIgnoreCase(val)) { 
      return state; 
     } 
     } 
     return STOPPED; 
    } 
    } 
} 
Cuestiones relacionadas