在jaxb XML Marshall for Entity中的dbId =“0”

时间:2013-11-07 06:17:43

标签: java xml jaxb

我有注释@Entity的实体Bean A,B 当我尝试使用JAXB Marshing编组Bean时,我得到了一个类似XML的结构

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a:A xmlns:a="..........." xmlns:b="...........">
<a:B dbId="0" >
<b:FirstName dbId="0">......</b:FirstName>
</a:B>
</a:A>

我用过

@XmlRootElement(name = "A",namespace = "........")
@XmlAccessorType(XmlAccessType.NONE) 
@Entity
public class A{
@XmlElement(name = "B")
    private B name;
............
...............
}

@Entity
@XmlRootElement(name = "B",namespace = "........")
@XmlAccessorType(XmlAccessType.NONE) 
public class B{
.................
}
  1. 为什么我独立=&#34;是&#34;马歇尔期间如何删除?
  2. 为什么我得到dbId =&#34; 0&#34;以及如何删除它?
  3. 如何添加class =&#34; x.y.z.A&#34;喜欢以下属性中的东西:

    <a:B class="x.y.z.B" >
    
  4. 我有一个类只有一个类型&#34; Float&#34; ,我不想在xml中显示浮动。

    @XmlRootElement(name="start")
    public class Start extends Timing{
    
        private Float mFloat;
    
        public Float getFloat() {
            return mFloat;
        }
    
        public void setFloat(Float f) {
            mFloat = f;
        }
    
    }
    

    当我编组时,我得到了

    <a:start>
                <start:float>8.329042</start:float>
            </a:start>
    

    如果没有&#34;浮动标记&#34;我怎么能显示它? ,如下?

    <a:start>8.329042<a/start>
    

    出于安全原因,我无法提供真正的课程。

1 个答案:

答案 0 :(得分:1)

  1. 您可以在JAXB_FRAGMENT上设置Marshaller属性,以防止将标头写入OutputStreamWriter
  2. 您必须具有使用@XmlAttribute注释的原始数字字段/属性。 JAXB不会封送空值,因此您可以将原语更改为其对应的对象形式(即intInteger)。
  3. 您可以引入一个使用String注释的私有静态@XmlAttribute字段,并使用此值填充它。
  4. 您可以使用float@XmlValue属性添加注释,以获得所需的结果。