XStream的父节点属性生成
代码:
测试实体类:
package XXX.XXX.XX;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import lombok.Data;
@XStreamAlias("node")//父级几点
@Data
public class TestDTO {
@XStreamAsAttribute//父级节点的属性字段
@XStreamAlias("Att")
private String att;
@XStreamAlias("text")//子节点
private String text;
@XStreamAlias("POType")
private String orderType;//子节点
}
测试工具类:
/**
* XStream xml与Java实体相互转换 by 陈中 2018/6/11
*/
public class XStreamHandleByExpert {
private final static Log logger = LogFactory.getLog(XStreamHandleByExpert.class);
/**
* 实体转xml字符串
* @param obj
* @return
*/
public String toXml(Object obj) {
// "utf8" 防止乱码 ,new XmlFriendlyNameCoder("_-", "_")解决下单的双下划线问题
XStream xstream = new XStream(new DomDriver("utf8",
new XmlFriendlyNameCoder("_-", "_")));
xstream.processAnnotations(obj.getClass()); // 识别obj类中的注解
return xstream.toXML(obj);
}
/**
* 字符串转实体
* @param xmlStr
* @param cls
* @param <T>
* @return
* @throws IOException
*/
public <T> T toBean(String xmlStr, Class<T> cls) throws IOException {
XStream xstream = new XStream(new DomDriver());
xstream.processAnnotations(cls);
xmlStr=xmlStr(xmlStr);
@SuppressWarnings("unchecked")
T t = (T) xstream.fromXML(xmlStr);
return t;
}
/**
* 读取xml字符串文本
* @param path
* @return
* @throws IOException
*/
private String xmlStr(String path) throws IOException {
File file = new File(path);//定义一个file对象,用来初始化FileReader
LoggerHelper.info("init FileReader==》"+file);
FileReader reader = new FileReader(file);//定义一个fileReader对象,用来初始化BufferedReader
BufferedReader bReader = new BufferedReader(reader);//new一个BufferedReader对象,将文件内容读取到缓存
StringBuilder sb = new StringBuilder();//定义一个字符串缓存,将字符串存放缓存中
String s = "";
while ((s =bReader.readLine()) != null) {//逐行读取文件内容,不读取换行符和末尾的空格
sb.append(s + "\n");//将读取的字符串添加换行符后累加存放在缓存中
}
bReader.close();
String str = sb.toString();
return str;
}
}
测试:
public static void main(String[] args) {
TestDTO testDTO = new TestDTO();
testDTO.setAtt("aaa");
testDTO.setText("123");
testDTO.setOrderStatus("");
XStreamHandleByExpert xStreamHandleByExpert = new XStreamHandleByExpert();
String st = xStreamHandleByExpert.toXml(testDTO);
System.out.println(st);
}