【问题标题】:Print POJO to System.out issue将 POJO 打印到 System.out 问题
【发布时间】:2014-05-20 12:30:39
【问题描述】:

按照一些教程 (this one) 我在控制台上没有得到相同的输出。 本教程是关于使用 JAXB API - JAXBContext、Unmarshaller、Marshaller 将 Java 对象转换为 XML 或从 XML 转换。

这是 POJO 代码:

package com.jaxb.example;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Customer {

    private String name;
    private int age;
    private int id;

    public String getName() {
        return name;
    }
    @XmlElement
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    @XmlElement
    public void setAge(int age) {
        this.age = age;
    }
    public int getId() {
        return id;
    }
    @XmlAttribute
    public void setId(int id) {
        this.id = id;
    }

}

这是解组代码:

package com.jaxb.example;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class JAXBExampleTestUnmarshall {

    public static void main(String [] args){

        try {
            File file = new File("./jaxb-data/file.xml");

            JAXBContext context = JAXBContext.newInstance(Customer.class);
            Unmarshaller jaxbUnmarshaller = context.createUnmarshaller();

            Customer customer = (Customer)jaxbUnmarshaller.unmarshal(file);
            //System.out.println(customer.getId());
            //System.out.println(customer.getName());
            //System.out.println(customer.getAge());
            System.out.println(customer);

        } catch (JAXBException e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

}

这是./jaxb-data/file.xml文件内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="1">
    <age>33</age>
    <name>Some Name</name>
</customer>

我在运行这个课程时收到com.jaxb.example.Customer@15e8d410

问题:为什么我在输出时没有得到Customer [name=Some Name, age=33, id=1]

【问题讨论】:

    标签: java jaxb


    【解决方案1】:

    您必须覆盖 Customer#toString,当您 Sysout 对象时会隐式调用它。标准实现是该对象的完全限定类名和十六进制编码-hashcode()

    【讨论】:

    • 我明白了,toString() 没有在 Customer 类的教程中实现,所以我认为它应该是默认行为。显然不是。谢谢。
    【解决方案2】:

    您需要重写 toString() 方法才能有意义地表示您的对象。 System.out.println() 调用toString() 方法,可以看到toString() 方法返回的字符串。

    public String toString(){
       return "Customer [name =" + name+ ", age=" + age
                + ",id =" + id "]";
     }
    

    【讨论】:

      猜你喜欢
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多