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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值