2012-09-04 4 views
11

Jak mogę zmapować prosty obiekt JSON {"status" : "successful"} automatycznie mapować do mojego Java Enum w JAX-RS?Jak ręcznie mapować pola Enum w JAX-RS

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

    private String status; 

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

Jeśli potrzebujesz dalszych szczegółów nie krępuj się zapytać :)

Odpowiedz

12

Poniższe JAXB adnotacje powinno wystarczyć. (I przetestowane przy użyciu Jettison ale nie próbowałem innych dostawców):

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

Dzięki Ci odpowiedzieć. Używam standardowych funkcji JAX-RS, a serwer aplikacji decyduje, która implementacja będzie używana. W moim przypadku jest to JBoss 7.1 i automatycznie używa on jacksona (chyba). Czy wiesz, czy istnieje sposób wymuszenia jBoss przy użyciu innego dostawcy? Lub włączyć jBoss do używania 'XmlEnum' i' XmlEnumValue'? –

+0

Jest możliwe, że 'Jackson' zachowuje się podobnie do Jettison w odniesieniu do adnotacji JAXB - po prostu nie miałem czasu, aby to wypróbować. BTW, gdyby nie było jasne, powyższe adnotacje są standardowymi JAXB, które powinny być implementowane przez JAX-RS. –

+0

Niestety to nie działa. Ale w każdym razie to rozgryzę i opublikuję tutaj ... –

2

To może pomóc

@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; 
    } 
    } 
} 
Powiązane problemy