杰克逊多态反序列化由枚举名称而不是原始字段值

时间:2018-06-08 08:34:27

标签: java json enums jackson

问题类似于this one,但我有一个不同的问题。

外部系统使用整数字段作为消息类型向我们发送消息。

public enum MessageType {
    MEANINGFUL_NAME_1(1),
    MEANINGFUL_NAME_2(2),
    ...
    MEANINGFUL_NAME_N(N);

    @JsonCreator
    public static MessageType byCode(int code) { ... }
}

为了便于阅读,枚举的定义如下:

@JsonTypeInfo(
    use = Id.NAME,
    include = As.EXISTING_PROPERTY,
    property = "message_type",
    visible = true
)
@JsonSubTypes({
    @Type(value = SpecificMessageType1.class, name = "1"),
    @Type(value = SpecificMessageType2.class, name = "2"),
    @Type(value = SpecificMessageType3.class, name = "3"),
})
public abstract class Message {
    //...

但杰克逊仍然强制在其映射中使用整数值:

@JsonSubTypes({
    @Type(value = SpecificMessageType1.class, name = "MEANINGFUL_NAME_1"),
    @Type(value = SpecificMessageType2.class, name = "MEANINGFUL_NAME_2"),
    @Type(value = SpecificMessageType3.class, name = "MEANINGFUL_NAME_3"),
})

问题:是否可以让jackson在其映射中使用枚举值名称? (不构建自定义反序列化器)。

这样的事情:

def mainscreen():
    main.geometry("700x500+%d+%d"%(screensize[0]/2-350,screensize[1]/2-250)) #geometry command
    notificationson=tkinter.BooleanVar().set(True)
    menubar=Menu(main)
    notificationmenu=Menu(menubar,tearoff=0)
    notificationmenu.add_checkbutton(label="Notifications", onvalue=True,offvalue=False,variable=notificationson)
    menubar.add_cascade(label="Notifications",menu=notificationmenu) 
    main.config(menu=menubar) #applies the menu to the window

0 个答案:

没有答案