gpt4 book ai didi

java - JAXB - 从 XSD 生成类 - 将枚举转换为自定义 toString() 而不是枚举名称

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:38 24 4
gpt4 key购买 nike

使用 JAXB,我们直接生成 Java bean。在 XSD 中,我们有一个枚举类型(比如说):

<xs:simpleType name="ColorType">
<xs:restriction base="xs:string">
<xs:enumeration value="Red"/>
<xs:enumeration value="Blue"/>
<xs:enumeration value="Green"/>
</xs:restriction> </xs:simpleType>

在数据库中,我们可能有 R、B 和 G 等标志,分别代表红色、黑色和绿色。在某种程度上,我们将标志作为只有一个字母的单词。我想枚举,这样... ColorType.Red.toString() 等于 R ...或类似的东西,例如我可以将 R 链接到它。现在我正在使用一些条件语句手动检查枚举类型,然后在插入或任何数据库操作时我将转换回字符串。

我想到了一些解决这个问题的愚蠢解决方案(愚蠢的是,这些解决方案并不好)我认为使用

解决此问题的一种解决方案
<xs:enumeration value="R">

但这并没有告诉我什么是 R。

第二种解决方案可以将 ColorType 设为字符串,但这意味着我的 ColorType 甚至可以是 Z,这不是数据库中的任何颜色,在某种程度上我的意思是它将不受限制。 :( ...

有什么办法可以解决这个问题吗?

最佳答案

你可以为此使用 XJB-Binding,就像这样

<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<jxb:bindings schemaLocation="MySchema.xsd" node="xs:simpleType[@name='ColorType']">
<jxb:typesafeEnumClass>
<jxb:typesafeEnumMember value="Red" name="R" />
<jxb:typesafeEnumMember value="Green" name="G" />
<jxb:typesafeEnumMember value="Blue" name="B" />
</jxb:typesafeEnumClass>
</jxb:bindings>

这将生成一个包含所需映射的枚举。您可以通过调用生成的 value() - 枚举方法来访问该值。 (不要忘记将正确的架构位置放入绑定(bind)中,除非您的 XSD 名为 MySchema.xsd)

关于java - JAXB - 从 XSD 生成类 - 将枚举转换为自定义 toString() 而不是枚举名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7368322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com