2017-01-10 4 views
1

1. BACKENDRest: Senden Liste der Aufzählungen nicht alle Daten senden

In meinem Backend (SpringBoot) Ich sende Liste von Aufzählungen:

@RequestMapping("getMyEnum") 
public List<MyEnum> getMyEnum() { 
    return Arrays.asList(MyEnum.values()); 
} 

Hier ist MyEnum:

public enum MyEnum { 

    A("bla1"), 
    B("bla2"); 

    private String value; 

    MyEnum(String value) { 
... 

2. FRONTEND

Im Frontend (angular2) ich diese Liste in meiner NG2 Komponente empfange:

MY_ENUMS: MyEnum[]; 
... 
this.http.get('/util/getClassifications') 
    .map(response => response.json()) 
    .subscribe(myEnums => { 
    this.MY_ENUMS = myEnums; 
    }); 

Hier ist die Klasse MyEnum:

export class MyEnum { 
    value: string; 
} 

3. ERGEBNIS

Nach den Code ausgeführt wird:

MY_ENUMS contains ["A", "B"] 

Aber Ich würde erwarten:

MY_ENUMS will contains [ "A" : { "value" : "bla1"}, 
         "B" : { "value" : "bla2"}] 
+1

Sie ist das Netzwerkprotokoll für das Format der gesendeten Daten sehen. Es scheint, dass der Server diese Serialisierung durchführt. – Chandermani

Antwort

1

Per Default Jackson (JSON-Mapper, die im Frühjahr Stiefel verwendet wird) serialisiert nur den Enum-Namen. Um Ihre enum-Serialisierung anzupassen - und sie wie jedes andere Objekt zu behandeln - fügen Sie Ihrem Enum die folgende JsonFormat Annotation hinzu und es werden auch alle Eigenschaften der Enumeration abgebildet.

@JsonFormat(shape = JsonFormat.Shape.OBJECT) 
public enum MyEnum 

aktualisieren

  1. Stellen Sie sicher, dass Enum alle Getter zur Verfügung stellt.

    @JsonFormat(shape = JsonFormat.Shape.OBJECT) 
    public enum MyEnum { 
    
        A("bla1", 1), 
        B("bla2", 2); 
    
        private String valueA; 
        private long valueB; 
    
        MyEnum(String valueA, long valueB) { 
        this.valueA = valueA; 
        this.valueB = valueB; 
        } 
    
        public String getValueA() { 
        return valueA; 
        } 
    
        public long getValueB() { 
        return valueB; 
        } 
    }  
    
  2. Sie können Sie mit

    ObjectMapper mapper = new ObjectMapper(); 
    System.out.println(mapper.writeValueAsString(MyEnum.A)); 
    
  3. Das Ergebnis Serialisierung testen

    {"valueA":"bla1","valueB":1} 
    
+0

Danke für die Antwort! Die Enum muss auch Getter für ihre Eigenschaften haben. –

+0

@TomasMarik Sure, Sie sind willkommen. –

Verwandte Themen