【问题标题】:JAXB rename attributeJAXB 重命名属性
【发布时间】:2013-02-12 14:04:36
【问题描述】:

我有一个名字很长的类,它使用 JAXB 转换为 XML。使用@XmlRootElement(name="nicername"),我可以将外部XML 标记重命名为<nicername>

如何将具有丑陋名称的类的个别属性也重命名为好听的名称?

【问题讨论】:

  • 谢谢大家,这个问题已经回答了。诀窍是使用@XmlAccessorType(XmlAccessType.FIELD)。

标签: java attributes jaxb rename


【解决方案1】:

您可以使用以下方法为对象属性定义替代名称:

【讨论】:

  • 我试过@XmlElement(name="better"),只有当对应的setter函数的形参名称等于私有时才有效数据成员。唔。很奇怪。但是..现在我得到了两次属性,一次是丑陋的名字,一次是更好的名字。怎么了??
  • 这听起来不对。方法参数名称对序列化过程没有影响。您可能希望使用代码示例来扩展您的问题。
  • 这对我有用,就是这样:1)重命名了丑陋的对象名称,但是:2)也用原始名称复制了结果。 @XmlRootElement(name="niceclass") 公共类 UblyServiceObject 扩展 GeneralServiceObject { public UglyServiceObject() {} @XmlElement(name="nicemember") private SomeList someList1;公共无效 setSomeList(SomeList someList2) { this.someList1 = someList2; } public SomeList getSomeList() { return this.someList1; } }
  • 抱歉布局不好,看来我没有足够的声誉来回答我自己的问题。
  • @XmlAccessorType 注释还修复了对唯一形式参数名称的需求,以及数据成员的重复发出。很奇怪。
【解决方案2】:

@XmlAttribute 和@XmlElement 注释都可以使用与@XmlRootElement 注释相同的语法按名称重新映射。因此,只需将相关注释附加到您需要重新映射的每个单独的字段/属性,并为“名称”提供一个参数。

【讨论】:

    【解决方案3】:

    您可以使用@XmlAttribute@XmlElement 注释来更改XML 名称。如果您对字段进行注释,请务必在类上使用 @XmlAccessorType(XmlAccessType.FIELD) 注释:

    @XmlRootElement(name="nice-name")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class UglyName {
    
        @XmlElement(name="nice-element-name")
        private String uglyElementName;
    
        @XmlAttribute(name="nice-attribute-name")
        private String uglyAttributeName;
    
    }
    

    或者你可以注释属性:

    @XmlRootElement(name="nice-name")
    public class UglyName {
    
        private String uglyElementName;
        private String uglyAttributeName;
    
        @XmlElement(name="nice-element-name")
        public String getUglyElementName() {
             return uglyElementName;
        }
    
        public void setUglyElementName(String name) {
             this.uglyElementNamne = name;
        }
    
        @XmlAttribute(name="nice-attribute-name")
        public String getUglyAttributeName() {
             return uglyAttributeName;
        }
    
        public void setUglyAttributeName(String name) {
             this.uglyAttributeNamne = name;
        }
    
    }
    

    【讨论】:

    • 感谢您非常有价值和有启发性的回答 :-) 它有效!太好了,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多