实体类转换XML
程序员文章站
2022-06-15 12:09:26
...
package com.example.springboot09.com.test;
import com.example.springboot09.com.pojo.Student;
import org.apache.commons.lang.StringUtils;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
/**
* @Author: Administrator
* @Description:
* @Date: 2019-09-05 11:08
* @Modified By:
*/
public class Test5 {
public static void main(String[] args) {
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("id","410031401");
map.put("clazz","高三十四班");
map.put("name","周瑜");
map.put("age",16);
map.put("sex","男");
map.put("height",180.81);
map.put("weight",60.23);
Object obj=map2Object(map, Student.class);
String xml= convertToXml(obj,"GBK");
System.out.println(xml);
}
/**
* Map转成实体对象
*
* @param map map实体对象包含属性
* @param clazz 实体对象类型
* @return
*/
public static <T> T map2Object(HashMap<String, Object> map, Class<T> clazz) {
if (map == null) {
return null;
}
Object obj = null;
try {
obj = clazz.newInstance();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
int mod = field.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
field.setAccessible(true);
field.set(obj, map.get(field.getName()));
}
} catch (Exception e) {
e.printStackTrace();
}
return (T) obj;
}
/**
* 将对象直接转换成String类型的 XML输出
*/
public static String convertToXml(Object clazz, String encoding) {
// 创建输出流
StringWriter sw = new StringWriter();
try {
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(clazz.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
if (StringUtils.isNotBlank(encoding)) {
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
}
// 将对象转换成输出流形式的xml
marshaller.marshal(clazz, sw);
} catch (JAXBException e) {
e.printStackTrace();
}
return sw.toString();
}
}
实体类
package com.example.springboot09.com.pojo;
import javax.xml.bind.annotation.*;
/**
* @Author: Administrator
* @Description: 学生类
* @Date: 2019-09-04 16:58
* @Modified By:
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Result")
@XmlType(name = "",propOrder = {
"id",
"clazz",
"name",
"age",
"sex",
"height",
"weight"
})
public class Student {
@XmlElement(name = "ID",required = true)
private String id;
@XmlElement(name = "CLAZZ",required = true)
private String clazz;
@XmlElement(name = "NAME",required = true)
private String name;
@XmlElement(name = "AGE",required = true)
private Integer age;
@XmlElement(name = "SEX",required = true)
private String sex;
@XmlElement(name = "HEIGHT",required = true)
private double height;
@XmlElement(name = "WEIGHT",required = true)
private Double weight;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getClazz() {
return clazz;
}
public void setClazz(String clazz) {
this.clazz = clazz;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public Double getWeight() {
return weight;
}
public void setWeight(Double weight) {
this.weight = weight;
}
}
上一篇: scala学习总结11(函数)
下一篇: POJO和JavaBean的区别