XStream使用注解的方式格式化生成的xml
发布时间:2020-12-16 08:07:17 所属栏目:百科 来源:网络整理
导读:实体类: package cn.framework.t2;import java.util.ArrayList;import java.util.Date;import java.util.List;import com.thoughtworks.xstream.annotations.XStreamAlias;import com.thoughtworks.xstream.annotations.XStreamAsAttribute;import com.thou
|
实体类: package cn.framework.t2;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("user")
public class User {
@XStreamAsAttribute
@XStreamAlias("id")
private int userId;
@XStreamAlias("userName")
private String userName;
@XStreamAlias("pwd")
private String pwd;
// @XStreamImplicit
private List<UserLog> logs=new ArrayList<UserLog>();
@XStreamConverter(DateConverter1.class)
private Date lastVisted;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public List getLogs() {
return logs;
}
public void setLogs(List logs) {
this.logs = logs;
}
public Date getLastVisted() {
return lastVisted;
}
public void setLastVisted(Date lastVisted) {
this.lastVisted = lastVisted;
}
@Override
public String toString() {
return "User [userId=" + userId + ",userName=" + userName + ",pwd="
+ pwd + ",logs=" + logs + ",lastVisted=" + lastVisted + "]";
}
}
package cn.framework.t2;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("log")
public class UserLog {
@XStreamAsAttribute
@XStreamAlias("id")
private int logId;
@XStreamAlias("ip")
private String ip;
public int getLogId() {
return logId;
}
public void setLogId(int logId) {
this.logId = logId;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
@Override
public String toString() {
return "UserLog [logId=" + logId + ",ip=" + ip + "]";
}
}
常用注解: @XStreamAlias 别名注解; @XStreamAsAttribute 转换成属性,而不是子标签 @XStreamOmitField 忽略字段 @XStreamConverter 注入转换器(转换器要求无参构造器) @XStreamImplicit 忽略集合名称标签 转换器 package cn.framework.t2;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class DateConverter1 implements Converter{
private Locale locale;
public DateConverter1(){
super();
this.locale=locale.SIMPLIFIED_CHINESE;
}
//判断需要转换的类型
@Override
public boolean canConvert(Class clazz) {
// TODO Auto-generated method stub
return Date.class.isAssignableFrom(clazz);
}
//编写java对象到xml的逻辑
@Override
public void marshal(Object value,HierarchicalStreamWriter writer,MarshallingContext context) {
DateFormat formatter = DateFormat.getDateInstance(DateFormat.FULL,this.locale);
writer.setValue(formatter.format(value));
}
//编写xml到java对象的逻辑
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
GregorianCalendar calendar = new GregorianCalendar();
DateFormat formatter = DateFormat.getDateInstance(DateFormat.FULL,this.locale);
try{
calendar.setGregorianChange(formatter.parse(reader.getValue()));
}catch(ParseException e){
throw new ConversionException(e.getMessage(),e);
}
return calendar.getGregorianChange();
}
}
注意:与上一篇的转换器不同,这里构造器使用的是无参数的方式。 package cn.framework.t2;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Locale;
import org.apache.log4j.Logger;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class XStreamUtils1 {
private static final Logger logger=Logger.getLogger("cn.framework.t1.XStreamUtils1");
private static XStream xstream;
static{
logger.info("init xstream ...");
xstream=new XStream(new DomDriver());
//加载指定有XStream注解的bean
// xstream.processAnnotations(User.class);
//自动加载所有XStream注解的bean,与上面的区别是上面加载指定的bean
xstream.autodetectAnnotations(true);
}
public static void objectToXML(User user) throws FileNotFoundException{
logger.info("do objectToXML ...");
FileOutputStream fileOutputStream = new FileOutputStream("e:/out/xstream_user.xml");
xstream.toXML(user,fileOutputStream);
}
public static void xmlToObject() throws FileNotFoundException{
logger.info("do xmlToObject ...");
FileInputStream input = new FileInputStream("e:/out/xstream_user.xml");
User user=(User) xstream.fromXML(input);
System.out.println(user);
}
}
测试: package cn.framework.t2;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.Date;
public class Test1 {
public static void main(String[] args) throws FileNotFoundException,ParseException {
User user = new User();
user.setLastVisted(new Date());
user.setPwd("123456");
user.setUserId(1);
user.setUserName("aaa");
UserLog userLog = new UserLog();
userLog.setIp("127.0.0.1");
userLog.setLogId(1);
user.getLogs().add(userLog);
UserLog userLog1 = new UserLog();
userLog1.setIp("127.0.0.1");
userLog1.setLogId(2);
user.getLogs().add(userLog1);
XStreamUtils1.objectToXML(user);
// XStreamUtils1.xmlToObject();
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
