天天看点

xml 格式化成java_把xml格式的字符串转化为java对象

public class XmlConvert2Bean{

public T convert2Bean(T t, String xml) throws JAXBException {

StringReader reader = new StringReader(xml);

JAXBContext jaxbContext = JAXBContext.newInstance(t.getClass());

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

T result = (T) jaxbUnmarshaller.unmarshal(reader);

return result;

}

}

在t.getClass()那里想要通过T.class获得class,然而T是变量,所以不可以使用T.class。我搜索T.class,有好多这样的解决办法:

public ClassgetTClass() {

return (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

}

而我却报castClassException异常,原因是我这个类并没有带有泛型的父类。

//getGenericSuperclass()获得带有泛型的父类

//Type是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。

Type type=clazz.getGenericSuperclass();

//ParameterizedType参数化类型,即泛型

ParameterizedType p=(ParameterizedType)type;

//getActualTypeArguments获取参数化类型的数组,泛型可能有多个

Class c=(Class) p.getActualTypeArguments()[0];

我上面的方法还需要实例化一个对象传给方法,而我想要的只是传class过来。其实可以实例化Xml2JavaUtil时传要转化成的class进来。

public XmlConvert2Bean(Class clazz) {

try {

jaxbContext = JAXBContext.newInstance(clazz);

} catch (JAXBException e) {

e.printStackTrace();

}

}

设置xml节点属性值

使用@XmlAttribute标签即可,

参考:https://blog.csdn.net/Dawn_Bells/article/details/81908275

@XmlRootElement(name = "Xml")

@XmlAccessorType(XmlAccessType.FIELD)

public class RequestBean{

@XmlAttribute(name = "version") //设置节点属性

private String version;

private Body body;

@XmlElement(name = "sign")  //设置子节点

private String sign;

//省略封装

}

@XmlRootElement(name = "Body")

@XmlAccessorType(XmlAccessType.FIELD)

public class Body{

...

}

最终得到的xml文件大致为:

111111

111

fee

payname

accountType