关于java实体在xml报文和json报文之间的相互转换

本文介绍如何将Java对象转换为XML和JSON格式,并提供代码示例。涉及XStream和Gson等工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 背景
  • 对象转换为XML格式报文
  • 对象转换为JSON格式报文
  • 相关Jar包下载

    思来想去,还是觉得做做工作日志是很有必要的,近来项目中总是重复用着某一个知识点,本人记性差,几乎每次用每次都在查,现在做做工作总结,把常用的都记下来,没事的时候看看,这样既能加深自己对这些知识的印象防止遗忘过快,又能同各位大神交流心得指点不足,岂不是两全其美。最近做的项目涉及到跨项目数据传输,经常用到对象转换为XML或者是JSON格式,然后通过HttpClient或者是WebService进行传输,今天只讲让我蛮头疼的前两项。闲话不多说,首次写博客,不足之处还请各位多多指教。

通用对象赋值
首先先创建三个对象 Bird、Cat、Dog 三个对象都有相同的属性,keyProperty、name、age、gender、holder 贴代码:
<( ̄3 ̄)>

 Bird.java

public class Bird {
    private int keyProperty;
    private String name;
    private int age;
    private int gender;
    private String holder;

    public int getKeyProperty() {
        return keyProperty;
    }

    public void setKeyProperty(int keyProperty) {
        this.keyProperty = keyProperty;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public String getHolder() {
        return holder;
    }

    public void setHolder(String holder) {
        this.holder = holder;
    }

}

Cat.java


public class Cat {
    private int keyProperty;
    private String name;
    private int age;
    private int gender;
    private String holder;

    public int getKeyProperty() {
        return keyProperty;
    }

    public void setKeyProperty(int keyProperty) {
        this.keyProperty = keyProperty;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public String getHolder() {
        return holder;
    }

    public void setHolder(String holder) {
        this.holder = holder;
    }
}

Dog.java


public class Dog {
    private int keyProperty;
    private String name;
    private int age;
    private int gender;
    private String holder;

    public int getKeyProperty() {
        return keyProperty;
    }

    public void setKeyProperty(int keyProperty) {
        this.keyProperty = keyProperty;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public String getHolder() {
        return holder;
    }

    public void setHolder(String holder) {
        this.holder = holder;
    }
}

怕实体不贴全,你们有的粘贴复制过去还要再写实体,索性帮你们把实体写了,直接复制吧,记得头要有包名package.xx.xx.xxx这个自己写。

实体赋值方法:

public class BayAnimalAssignMent {
    public static BayAnimal bayAnimalAssignment() {
        // 1.first animal : dog named circle
        Dog circle = new Dog();
        circle.setKeyProperty(1);
        circle.setName("Circle");
        circle.setAge(2);
        circle.setGender(1);// male
        circle.setHolder("Bay");
        // 2.second animal : cat named coil
        Cat coil = new Cat();
        coil.setKeyProperty(2);
        coil.setName("Coil");
        coil.setAge(1);
        coil.setGender(0);// female
        coil.setHolder("Bay");
        // 3.third animal : cat named coco
        Cat coco = new Cat();
        coco.setKeyProperty(3);
        coco.setName("Coco");
        coco.setAge(1);
        coco.setGender(1);// male
        coco.setHolder("Bay");
        // 4.forth animal : bird named jojo
        Bird jojo = new Bird();
        jojo.setKeyProperty(4);
        jojo.setName("Jojo");
        jojo.setAge(1);
        jojo.setGender(0);// female
        jojo.setHolder("Bay");
        // 5.fifth animal : bird name nono
        Bird nono = new Bird();
        nono.setKeyProperty(5);
        nono.setName("Nono");
        nono.setAge(1);
        nono.setGender(1);// male
        nono.setHolder("Bay");
        List<Cat> cats = new ArrayList<Cat>();
        cats.add(coil);
        cats.add(coco);
        List<Bird> birds = new ArrayList<Bird>();
        birds.add(jojo);
        birds.add(nono);
        // entity assignment
        BayAnimal bayAnimal = new BayAnimal();
        bayAnimal.setDog(circle);
        bayAnimal.setCats(cats);
        bayAnimal.setBirds(birds);
        return bayAnimal;
    }
}

对象转换为XML格式报文核心代码
一定要记得导jar包,要不然一片红!jar包名字如下:”
xstream-1.3.1.jar
链接放最后,要者自取。

public class ObjectTransformXML {

    public static void main(String[] args) {
        BayAnimal bayAnimal = BayAnimalAssignMent.bayAnimalAssignment();
        // declare xStream to transform
        XStream xs = new XStream(new DomDriver());
        // use this method when you don't using annotations
        xs.alias("Bird", Bird.class);
        xs.alias("Cat", Cat.class);
        xs.alias("BayAnimal", BayAnimal.class);
        String requestXML = xs.toXML(bayAnimal);
        System.out.print(requestXML);
        bayAnimal = (BayAnimal) xs.fromXML(requestXML);
    }
}

这个main方法实现了简单的将对象转换为XML和将XML转换为对象的功能:
1.首先,声明XStream对象时,需要在构造方法中传入参数new DOMDriver(),按照字面意思理解就是一个驱动,说来也奇怪,我不加这个参数的时候,可以将它转换为XML但是转换回对象的时候就会报错,报错如下:
Exception in thread “main” java.lang.IllegalArgumentException: XPP3 pull parser library not present. Specify another driver. For example: new XStream(new DomDriver())
很明显咯。人家都告诉你要怎么玩儿这个东西了,那就加上,有知道为什么的朋友请赐教~~~

2.其次,调用alias方法,很明显,根据字面意思不难理解,就是起别名,你的XML的所有节点,都是根据你这个alias(“别名”,类名.class),中的别名来的,当然,也可以不设置,但是除了一些子节点的属性是属性名之外,其他的涉及到对象的根节点,全部都为包名路径,有时候还会出现异常状况,根节点后面还会有refined=“”之类的,这种情况本人第一次使用这个的时候遇到过,但是重新开了个项目重新做了以后就再也没遇到过了。。。比较遗憾。。。。。

3.再来就是这两个方法了,好好记着吧,toXML();根据字面意思就可以看得出来,目标是XML,即实体转化为XML格式的方法;反之,fromXML();就是转回实体的方法。到此为止。

对象转换为JSON格式报文核心代码
一定要记得导jar包,要不然一片红!jar包名字如下:”
fastjson-1.1.24.jar
gson.jar
链接放最后,要者自取。

public class ObjectTransformJSON {

public static void main(String [] args){
    Gson gson = new Gson();
    BayAnimalbayAnimal=BayAnimalAssignMent.bayAnimalAssignment();
    String requestJson = JSON.toJSONString(bayAnimal);
    bayAnimal = gson.fromJson(requestJson, BayAnimal.class);
    System.out.println(requestJson)
}
}

1.首先呢,还是一样,默认赋值方法给实体赋值
2.其次,通过fastjson包中的 json对象调用tojsonString方法 很明显,tojsonString 就是转换成接送字符串的方法啦
3.最后,转换回实体的时候,本人太蠢,没有找到方法,但是之前在学校一直用的都是Gson包,这不,就用了Gson包中的fromJson方法,将字符串再次转换成为实体,ok 到此为止。

相关jar包下载请点击我 <( ̄3 ̄)>

还请各位多多指教,就这么多了~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值