Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Moxy中封送的泛型类型中排除类型元素_Java_Generics_Jaxb_Moxy_Xmltransient - Fatal编程技术网

Java 从Moxy中封送的泛型类型中排除类型元素

Java 从Moxy中封送的泛型类型中排除类型元素,java,generics,jaxb,moxy,xmltransient,Java,Generics,Jaxb,Moxy,Xmltransient,我正在使用Moxy 2.5.1将一个对象编组为json。该对象扩展了一个泛型类。我不想要type元素的输出,所以我试着在下面的示例中使用 如果标记为@XmlTransient的类不是泛型的,则该过程可以工作,但如果它是泛型的,则类型元素始终是输出的 这里有一个公认的人为的例子: public class AB { @XmlElement String a = "A"; @XmlElement String b = "B"; } @XmlTransient pub

我正在使用Moxy 2.5.1将一个对象编组为json。该对象扩展了一个泛型类。我不想要type元素的输出,所以我试着在下面的示例中使用

如果标记为@XmlTransient的类不是泛型的,则该过程可以工作,但如果它是泛型的,则类型元素始终是输出的

这里有一个公认的人为的例子:

public class AB {
    @XmlElement
    String a = "A";
    @XmlElement
    String b = "B";
}

@XmlTransient
public class Value {
    @XmlElement
    @XmlPath(".")
    AB value = new AB();
}

@XmlRootElement
public class Record extends Value {
    @XmlElement
    int id = 1;
}
我使用以下代码封送记录:

JAXBContext jaxbContext =
    org.eclipse.persistence.jaxb.JAXBContextFactory
        .createContext(
            new Class[]{ Record.class, AB.class}, null);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
Record record = new Record();
marshaller.marshal(record, System.out);
并获得以下输出:

{"a":"A","b":"B","id":1}
现在,如果我尝试以下方法:

@XmlTransient
public class ValueGeneric<T> {
    @XmlElement
    @XmlPath(".")
    T value;
}

@XmlRootElement
public class RecordAB extends ValueGeneric<AB> {
    @XmlElement
    int id = 1;
}
其编组为:

{"type":"ab","a":"A","b":"B","id":1}
我希望它像第一个一样封送,不带type元素

我不需要解组,所以如果类型信息丢失也没关系

如果我输出XML,也会发生类似的事情;RecordAB的根元素设置了以下属性:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ab"

有人知道如何防止类型元素被输出吗?

我不能重复您的常规测试。是否可以使用用于使用泛型类进行测试的代码进行更新?更新代码以添加用于使用泛型类进行测试的代码。谢谢
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ab"