java - 实体的 jaxb XML Marshall 中的 dbId ="0"

标签 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. 为什么我在 marshall 期间收到standalone="yes"以及如何删除它?
  2. 为什么我会收到 dbId="0"以及如何删除它?
  3. 如何在我的属性中添加类似 class="x.y.z.A"的内容,如下所示:

    <a:B class="x.y.z.B" >
    

我有一个类,它只有一个类型为“Float”的变量,并且我不想在 xml 中显示 float 。

@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>

如何在没有“ float 标签”的情况下显示它,如下所示?

<a:start>8.329042<a/start>

出于安全原因,我无法提供我的真实类(class)。

最佳答案

  1. 您可以在 Marshaller 上设置 JAXB_FRAGMENT 属性,以防止 header 写入 OutputStreamWriter
  2. 您必须有一个用 @XmlAttribute 注释的原始数字字段/属性。 JAXB 不会编码(marshal) null 值,因此您可以将基元更改为其相应的对象形式(即 intInteger)。
  3. 您可以引入一个用 @XmlAttribute 注解的私有(private)静态 String 字段,并使用该值填充它。
  4. 您可以使用 @XmlValue 注解 float 属性以获得所需的结果。

关于java - 实体的 jaxb XML Marshall 中的 dbId ="0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19829229/

相关文章:

java - 编译器会优化未使用的私有(private)方法吗?

java - java中的条件正则表达式

java - 这个官方 Xml 模式是否无效或者是 Jaxb 的错误限制

java - 将带有 JAXB 注释的 Java 映射到 XSD keys/keyrefs

python - ElementTree 命名空间字典不适用于 find() 或 findall()

java - 同一 jar 文件中的两个相同的类

java - AndroidAnnotations 运行时错误

java - 从 Java 发布到 SharePoint 2013

c++ - 读/写同一配置文件不同版本的设计方法

javascript - jqGrid无法从服务器加载xml数据