- 背景
- 对象转换为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 到此为止。
还请各位多多指教,就这么多了~