休息:发送枚举列表不会发送所有数据
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
更新
确保您的枚举提供了所有 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}
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
更新
确保您的枚举提供了所有 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}