2012-09-04 17 views
11

単純なJSONオブジェクトをマップするにはどうすればよいですか?{"status" : "successful"}はJAX-RS内のJava Enumに自動的にマップされますか?あなたが必要な場合は、次のJAXB注釈がそれを行う必要がありますJAX-RSの列挙型フィールドを手動でマップする方法

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

    private String status; 

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

は、さらに詳細には

答えて

12

:)お気軽に。 (私はJettisonを使用してテストしたが、私は他のプロバイダを試していませんでした):

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

感謝を助けるかもしれません。私は標準のJAX-RS機能を使用しています。アプリケーションサーバはどの実装が使用されるかを決定します。私の場合、JBoss 7.1であり、自動的にjacksonを使用します(私は推測します)。他のプロバイダを使用してjBossを強制する方法があるかどうか知っていますか?または、jBossで 'XmlEnum'と' XmlEnumValue'を使用できるようにしますか? –

+0

JAXBのアノテーションに関して「ジャクソン」がジェットソンと同様の振る舞いをする可能性があります。単に試してみる時間がありませんでした。 BTWでは、明らかでない場合、上記のアノテーションは、JAX-RS実装が従うべき標準のJAXBです。 –

+0

残念ながら、それは動作しません。しかし、とにかく私はそれを理解し、ここに投稿します... –

2

これはあなたが答えるため

@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; 
    } 
    } 
} 
関連する問題