2012-09-04 28 views
11

JAX-RS'deki Java Enum'a basit bir JSON nesnesi {"status" : "successful"} otomatik eşlemesini nasıl eşleyebilirim? Eğer gerekiyorsa aşağıdaki JAXB ek açıklamalar yapmalıJAX-RS'de enum alanlarını el ile nasıl eşleştirilir

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

    private String status; 

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

fazla detay

cevap

12

:) sormaya çekinmeyin. (Ben Jettison kullanılarak test ama diğer sağlayıcıları denedim değil): cevap için

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

Teşekkür yardımcı olabilir. Standart JAX-RS özelliklerini kullanıyorum ve uygulama sunucusu hangi uygulamanın kullanılacağına karar veriyor. Benim durumumda JBoss 7.1 ve otomatik olarak jackson kullanır (sanırım). JBoss'u başka bir sağlayıcı kullanarak zorlamak için bir yol olup olmadığını biliyor musunuz? Veya jBoss'u 'XmlEnum' ve' XmlEnumValue' kullanmasını etkinleştirin mi? –

+0

“Jackson” ın JAXB ek açıklamalarına göre Jettison'a benzer davranması mümkündür - bunu denemek için zamanım olmadı. BTW, eğer açık değilse, yukarıdaki ek açıklamalar JAX-RS uygulamalarının takip etmesi gereken standart JAXB'dir. –

+0

Maalesef çalışmıyor. Ama yine de anlayacağım ve buraya göndereceğim ... –

2

Bu size

@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; 
    } 
    } 
} 
İlgili konular