控制Moxy如何以通用方式序列化和反序列化枚举

时间:2015-04-06 15:50:06

标签: java enums eclipselink marshalling moxy

在我们的项目中,我们有许多实现特定接口的枚举,这是一种如何控制其在数据库中的支持的方法。核心是一个方法getCode,它返回存储在数据库中的值。

Moxy可以使用此值进行编组和非编组操作。

例如,枚举如下所示:

enum Weekday implements PersistableEnum<String> {
    MONDAY("MON"),
    // .. all the remaining days
    ;
    // the constructor which sets the code, etc.

    @Override
    public String getCode() {
         return code;
    }
}

使用接口PersistableEnum(为简单起见而简化):

interface PersistableEnum<C> {
    C getCode();
}

使用code值在数据库中支持枚举(以及所有其他)。

在我的方案中,我需要Moxy将MONDAY序列化为MON,这可以通过

实现
  • a @XmlEnumValue("MON")
  • 适配器XmlAdapter<String, Weekday>

但是,我想知道是否可以提供更优雅的解决方案,既不需要每个枚举的适配器也不需要枚举实现中的附加代码(例如@XmlEnumValue)。
一种透明地用于实现我的PersistableEnum接口的所有枚举的方法。

我对XmlAdapter<String, PersistableEnum>的实施没有成功,因为我没有对该课程的背景进行解组;因此,我不知道使用哪个PersistableEnum。 (编组部分很容易实现。)

1 个答案:

答案 0 :(得分:1)

我不认为这是可能的。我担心MOXy / JAXB RI中没有这样的机制。