在Jaxb转换的Enum类中检索@XmlEnumValue注释属性值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Jaxb转换的Enum类中检索@XmlEnumValue注释属性值相关的知识,希望对你有一定的参考价值。

@XmlType(name = "WeekEnum")
@XmlEnum
public enum WeekEnum implements Serializable {

    MONDAY("Monday"),

    @XmlEnumValue("SUNDAY.ON")
    SUNDAY("Sunday")

    private final String value;

    WeekEnum(String v) {
        value = v;
    }

    public String value() {
        return value;
    }

    public static WeekEnum fromValue(String v) {
        for (WeekEnum c: WeekEnum.values()) {
            if (c.value.equals(v)) {
                return c;
            }
        }

        throw new IllegalArgumentException(v);
    }
}

我有一个Enum类WeekEnum,它是一个Jaxb类。

WeekEnum day = WeekEnum.SUNDAY;

为了从Enum日获得值“Sunday”,我们写day.value();

要从Enum日获得值“SUNDAY”,我们写day.name();

我们如何从Eum日获得“SUNDAY.ON”的价值?

如果我有“星期日”的价值,我们如何获得相应的“SUNDAY.ON”?

答案

您需要将其存储在与值类似的单独变量中。

@XmlType(name = "WeekEnum")
@XmlEnum
public enum WeekEnum implements Serializable {

MONDAY("Monday"),

@XmlEnumValue("SUNDAY.ON")
SUNDAY("Sunday", "SUNDAY.ON")

private final String value;
private final String xmlValue;

WeekEnum(String v) {
    value = v;
}
WeekEnum(String v, String xmlValue){
   this(v);
   this.xmlValue = xmlValue;
}

public String value() {
    return value;
}

public String getXmlValue() {
    return xmlValue;
}

public static WeekEnum fromValue(String v) {
    for (WeekEnum c: WeekEnum.values()) {
        if (c.value.equals(v)) {
            return c;
        }
    }

    throw new IllegalArgumentException(v);
}
}
另一答案

如果您有一个名为week的枚举实例,则可以执行以下操作

week.getClass().getField(week.name()).getAnnotation(XmlEnumValue.class).value()

以上是关于在Jaxb转换的Enum类中检索@XmlEnumValue注释属性值的主要内容,如果未能解决你的问题,请参考以下文章

JAXB 可以在基类中初始化值吗?

在 JAXB 生成的类中未设置默认布尔值

将@Generated注释添加到JAXB生成的类中

如何将 Hibernate String 列转换为 Enum?

JAXB xs:maxLength 和 minOccurs="0" 未在 xsd 生成的类中显示

XmlRootElement JAXB