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

来源:互联网 发布:财务报表制作软件 编辑:程序博客网 时间:2024/05/01 01:48
  • 背景
  • 对象转换为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 ̄)>

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

1 0
原创粉丝点击