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

3
在我们的项目中,有很多枚举类型实现了一个特定的接口,这是控制它在数据库中备份的方式。核心是一个名为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”,这可以通过以下两种方式实现:
1. 使用“@XmlEnumValue(”MON“)”注释 2. 使用适配器“XmlAdapter ”
然而,我想知道是否有更加优雅的解决方案,既不需要为每个枚举类型提供适配器,也不需要在枚举实现中添加额外的代码(例如“@XmlEnumValue”)。一种透明地用于实现我的“PersistableEnum”接口的所有枚举类型的方法。
我尝试了实现“XmlAdapter ”,但是我没有被反序列化的类的上下文,因此我不知道要使用哪个“PersistableEnum”。(序列化部分很容易实现。)
1个回答

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接