<强>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
更新
确保您的枚举提供所有 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; } }
您可以使用以下命令测试序列化
ObjectMapper mapper = new ObjectMapper(); System.out.println(mapper.writeValueAsString(MyEnum.A));
结果是
{"valueA":"bla1","valueB":1}
关于json - 其余 : Sending List of Enums does not send all data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576087/