json - 其余 : Sending List of Enums does not send all data

标签 json spring-boot jackson jax-rs json-serialization

<强>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;
  });

这是 MyEnum 类:

export class MyEnum {
    value: string;
}

<强>3。结果

运行代码后:

MY_ENUMS contains ["A", "B"]

但我希望:

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

最佳答案

默认的Jackson(Spring Boot 中使用的 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}
    

关于json - 其余 : Sending List of Enums does not send all data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576087/

相关文章:

json - 该名称不能包含以下任何符号 : '[, ], .' . '.用于 Azure 逻辑应用程序中的 Compose

java - Modelmapper 无法映射整个模型?

java - Jackson - BeanDeserializerBase

java - Jackson 使用泛型反序列化 JSON

python - Django 休息框架没有正确读取 JSON

java - Jackson - 转换序列化字段值

java - 如果字段值为空,如何告诉 jackson 在序列化期间忽略字段?

Java - Jackson反序列化 - 如何反序列化接口(interface)数组?

javascript - 在 React/TypeScript/Webpack 中覆盖 JSON 文件

spring-boot - Log4J2 在很多层面上都无法在 Spring Boot 上工作