Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 如何在JAXB/JSON中命名复杂对象?_Java_Json_Jaxb - Fatal编程技术网

Java 如何在JAXB/JSON中命名复杂对象?

Java 如何在JAXB/JSON中命名复杂对象?,java,json,jaxb,Java,Json,Jaxb,结果: @XmlRootElement(name = "test") public class MyDTO { @XmlElement(name = "test2) private MyObject meta; } 问题: 我想要一个名为“test”的“outer”标签 为什么meta的@xmlement(name”属性不起作用 我的第一篇帖子 实际上,你可以用@XmlRootElement来命名你的“外部”标记。如果你需要另一个外部标记,我不知道如何实现 您的第二个顾虑可能是

结果:

@XmlRootElement(name = "test")
public class MyDTO {
    @XmlElement(name = "test2)
    private MyObject meta;
}
问题:

  • 我想要一个名为“test”的“outer”标签
  • 为什么meta的
    @xmlement(name
    ”属性不起作用
  • 我的第一篇帖子

    实际上,你可以用@XmlRootElement来命名你的“外部”标记。如果你需要另一个外部标记,我不知道如何实现

    您的第二个顾虑可能是您放置@XmlElement的位置。我将它放在getter方法中,它对我来说运行良好

    对于JSON输出,我使用了jersey-JSON-1.18。 以下内容也适用于您可以定义的其他复杂类型,而不是“stringmeta”

    以下是我能够产生的输出:

    作为JSON

    {meta:{...}}
    
    作为XML

    {"myId":"id1","myMeta":"text1"}
    
    这是我的小班,用来生成输出XML文件

    @XmlRootElement(name = "mytupel")
    public class Tupel {
        // @XmlElement(name = ) does not work here - defined it on the getter method
        private String id;
    
        // @XmlElement(name = ) does not work here - defined it on the getter method
        private String meta;
    
        /**
         * Needed for JAXB
         */
        public Tupel() {
        }
    
        /**
         * For Test purpose...
         */
        public Tupel(String id, String text) {
            super();
            this.id = id;
            this.meta = text;
        }
    
        @XmlElement(name = "myId")
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        @XmlElement(name = "myMeta")
        public String getMeta() {
            return meta;
        }
    
        public void setMeta(String meta) {
            this.meta = meta;
        }
    
        /**
         * For Test purpose...
         */
        @Override
        public String toString() {
            return id + ": " + meta;
        }
    }
    
    希望这能回答你的问题! 干杯 马克斯

    @XmlRootElement(name = "mytupel")
    public class Tupel {
        // @XmlElement(name = ) does not work here - defined it on the getter method
        private String id;
    
        // @XmlElement(name = ) does not work here - defined it on the getter method
        private String meta;
    
        /**
         * Needed for JAXB
         */
        public Tupel() {
        }
    
        /**
         * For Test purpose...
         */
        public Tupel(String id, String text) {
            super();
            this.id = id;
            this.meta = text;
        }
    
        @XmlElement(name = "myId")
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        @XmlElement(name = "myMeta")
        public String getMeta() {
            return meta;
        }
    
        public void setMeta(String meta) {
            this.meta = meta;
        }
    
        /**
         * For Test purpose...
         */
        @Override
        public String toString() {
            return id + ": " + meta;
        }
    }
    
    public class Main {
    
        private static final String TUPEL_1_XML = "./tupel1.xml";
        private static final String TUPEL_2_XML = "./tupel2.xml";
    
        public static void main(String[] args) throws JAXBException, FileNotFoundException {
            // init JAXB context/Marhsaller stuff
            JAXBContext context = JAXBContext.newInstance(Tupel.class);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            Unmarshaller unmarshaller = context.createUnmarshaller();
    
            // create some Datatypes
            Tupel data1 = new Tupel("id1", "text1");
            Tupel data2 = new Tupel("id2", "42");
    
            // produce output
            marshaller.marshal(data1, new File(TUPEL_1_XML));
            marshaller.marshal(data2, new File(TUPEL_2_XML));
    
            // read from produced output
            Tupel data1FromXml = (Tupel) unmarshaller.unmarshal(new FileReader(TUPEL_1_XML));
            Tupel data2FromXml = (Tupel) unmarshaller.unmarshal(new FileReader(TUPEL_2_XML));
    
            System.out.println(data1FromXml.toString());
            System.out.println(data2FromXml.toString());
    
            System.out.println(marshalToJson(data1FromXml));
            System.out.println(marshalToJson(data2FromXml));
        }
    
        public static String marshalToJson(Object o) throws JAXBException {
            StringWriter writer = new StringWriter();
            JAXBContext context = JSONJAXBContext.newInstance(o.getClass());
    
            Marshaller m = context.createMarshaller();
            JSONMarshaller marshaller = JSONJAXBContext.getJSONMarshaller(m, context);
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshallToJSON(o, writer);
            return writer.toString();
        }
    
    }