1。 BACKEND
在我的后端(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。 FRONTEND
在前端(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。 RESULT
运行代码后:
MY_ENUMS contains ["A", "B"]
但我希望:
MY_ENUMS will contains [ "A" : { "value" : "bla1"},
"B" : { "value" : "bla2"}]
答案 0 :(得分:2)
默认情况下Jackson
(Spring Boot中使用的JSON映射器)仅序列化枚举名称。要调整枚举序列化 - 并将其视为每个其他对象 - 在枚举中添加以下JsonFormat
注释,它也将映射枚举的所有属性。
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum MyEnum
更新
确保您的枚举提供所有吸气剂。
@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;
}
}
您可以使用
测试序列化ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(MyEnum.A));
结果是
{"valueA":"bla1","valueB":1}