休息:发送枚举列表不会发送所有数据

Rest: Sending List of Enums does not send all data

1。后端

在我的后端 (SpringBoot) 我正在发送枚举列表:

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

这是 MyEnum:

public enum MyEnum {

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

  private String value;

  MyEnum(String value) {
...

2。前端

在前端 (angular2) 我在我的 ng2 组件中收到这个列表:

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

这里是 class MyEnum:

export class MyEnum {
    value: string;
}

3。结果

在运行之后代码:

MY_ENUMS contains ["A", "B"]

但我希望:

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

默认情况下 Jackson(在 Spring 引导中使用的 JSON 映射器)仅序列化枚举名称。要调整您的枚举序列化 - 并将其视为所有其他对象 - 将以下 JsonFormat 注释添加到您的枚举中,它也会映射枚举的所有属性。

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

更新

  1. 确保您的枚举提供了所有 getter。

    @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. 你可以用

    测试你的序列化
    ObjectMapper mapper = new ObjectMapper();
    System.out.println(mapper.writeValueAsString(MyEnum.A));
    
  3. 结果是

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