使用 Jackson 序列化枚举 [英] Serializing enums with Jackson
问题描述
我有一个枚举如下:
公共枚举 OrderType {未知(0,未定义"),TYPEA(1, "类型 A"),TYPEB(2, "B 型"),TYPEC(3, "Type C");私有整数 ID;私人字符串名称;私人工作订单类型(整数 ID,字符串名称){this.id = id;this.name = 名称;}//设置器,获取器....}
我用我的控制器返回枚举数组(new OrderType[] {UNKNOWN,TYPEA,TYPEB,TYPEC};
),Spring 将其序列化为以下 json 字符串:
["UNKNOWN", "TYPEA", "TYPEB", "TYPEC"]
强制 Jackson 像 POJO 一样序列化枚举的最佳方法是什么?例如:
<预><代码>[{"id": 1, "name": "未定义"},{"id": 2, "name": "Type A"},{"id": 3, "name": "Type B"},{"id": 4, "name": "Type C"}]我使用了不同的注释,但无法获得这样的结果.
最后我自己找到了解决方案.
我必须用 @JsonSerialize(using = OrderTypeSerializer.class)
注释枚举并实现自定义序列化器:
公共类 OrderTypeSerializer 扩展 JsonSerializer{@覆盖public void serialize(OrderType 值,JsonGenerator 生成器,SerializerProvider 提供者)抛出 IOException,JsonProcessingException {generator.writeStartObject();generator.writeFieldName("id");generator.writeNumber(value.getId());generator.writeFieldName("name");generator.writeString(value.getName());generator.writeEndObject();}}
I have an Enum desrcibed below:
public enum OrderType {
UNKNOWN(0, "Undefined"),
TYPEA(1, "Type A"),
TYPEB(2, "Type B"),
TYPEC(3, "Type C");
private Integer id;
private String name;
private WorkOrderType(Integer id, String name) {
this.id = id;
this.name = name;
}
//Setters, getters....
}
I return enum array with my controller ( new OrderType[] {UNKNOWN,TYPEA,TYPEB,TYPEC};
), and Spring serializes it into the following json string:
["UNKNOWN", "TYPEA", "TYPEB", "TYPEC"]
What is the best approach to force Jackson to serialize enums just like POJOs? E.g.:
[
{"id": 1, "name": "Undefined"},
{"id": 2, "name": "Type A"},
{"id": 3, "name": "Type B"},
{"id": 4, "name": "Type C"}
]
I played with different annotations but couldn't manage to get such result.
Finally I found solution myself.
I had to annotate enum with @JsonSerialize(using = OrderTypeSerializer.class)
and implement custom serializer:
public class OrderTypeSerializer extends JsonSerializer<OrderType> {
@Override
public void serialize(OrderType value, JsonGenerator generator,
SerializerProvider provider) throws IOException,
JsonProcessingException {
generator.writeStartObject();
generator.writeFieldName("id");
generator.writeNumber(value.getId());
generator.writeFieldName("name");
generator.writeString(value.getName());
generator.writeEndObject();
}
}
这篇关于使用 Jackson 序列化枚举的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!