2016-03-22 4 views
1

Я использую перечисление как часть моей модели данных. Когда я десериализую свой вход json, перечисление в моей модели данных не заполняется.Невозможно обработать данные eNum весной

Не могли бы вы посоветовать?

public enum AccessTypeEnum {

PUBLIC(1, "public"), 
PRIVATE(2, "private"), 

private int code; 
private String accessType; 

private AccessTypeEnum(int code, String accessType) { 
    this.code = code; 
    this.accessType = accessType; 
} 

public String getAccessType() { 
    return accessType; 
} 

public int getCode() { 
    return code; 
} 

}

Мой inputJson является

{ "accessType":"public" }

десериализовать

AccessTypeEnum e = gson.fromJson(inputJson, AccessTypeEnum.class);

ответ

1

Вы должны добавить аннотации "SerializedName" во всех областях перечислений. Документация для аннотирования здесь: https://google.github.io/gson/apidocs/com/google/gson/annotations/SerializedName.html

Вашего перечисление будет выглядеть

import com.google.gson.annotations.SerializedName; 

public enum AccessTypeEnum {  
    @SerializedName("public") PUBLIC(1, "public"), 
    @SerializedName("private") PRIVATE(2, "private"), 

    private int code; 
    private String accessType; 

    private AccessTypeEnum(int code, String accessType) { 
     this.code = code; 
     this.accessType = accessType; 
    } 

    public String getAccessType() { return accessType; } 
    public int getCode() { return code; } 
} 

Также обратите внимание, что вы не можете десериализацию перечисления, вы должны использовать объект-оболочку, например:

class MyObj { 
    AccessTypeEnum accessType; 
} 

public static final void main(String args[]) { 
    MyObj obj = new Gson().fromJson("{ \"accessType\": \"public\" }", MyObj.class); 
    System.out.println("" + obj.accessType); 
} 
+0

Большое спасибо –

+0

Буду признателен, если вы примете мой ответ. Все о принятии ответов можно найти здесь для справки: http://meta.stackexchange.com/a/5235 –

Смежные вопросы