把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 Class getTClass() {
        return (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }

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

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

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

  3. Type type=clazz.getGenericSuperclass();

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

  5. ParameterizedType p=(ParameterizedType)type;

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

  7. 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
    

你可能感兴趣的:(爬坑日记)