xml格式接口数据编程实战

系统对外提供接口,或者系统调用外部接口,常常会使用xml格式作为接口数据传输格式(json数据,txt文本数据亦可),下面讲讲xml数据的生成和解析。

首先讲讲xml数据生成,通常可以用两种方法,使用Xstream直接将java bean转化为xml文件数据,另外一种使用freemarker模板渲染xml数据,这两种方法各有利弊,下面针对这两种方法进行一下分析。

java bean转为xml文件数据

使用Xstream库可以直接将java bean转化为xml文件,当然亦可将xml文件数据转化为java bean,Xstream官网给出xstream解释如下图:


about xstream

使用XStream库之前首先要引用jar,pom文件中加入依赖:

   
    com.thoughtworks.xstream   
    xstream   
    1.4.7

转换代码:

// 新建domDriver对象
private static DomDriver domDriver = new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_"));
public static String toXml(Object obj) {   
 XStream xStream = new XStream(domDriver);    
xStream.processAnnotations(obj.getClass());    
return xStream.toXML(obj);
}

新建domDriver对象,设置编码为UTF-8,然后处理obj中给Xstream用于解析的注解,最后转化为xm文件格式的字符型数据。
大家有可能看的懵懵懂懂,直接上代码可以看的更直观,XStreamTest类的注解如下:

@XStreamAlias("xml")
public class XStreamTest {    
@XStreamAlias("test")    
private String test;    
@XStreamAlias("succ")    
private String succ;    
@XStreamAlias("data")    
private Data data;    
@XStreamAlias("res")    
private String res;     
 this.res = res;    }    
    @XStreamAlias("data")    
    class Data {        
    @XStreamAlias("trades")        
    private String trades;        
    @XStreamAlias("total_results")        
    private String total_results;        
    @XStreamAlias("has_next")        
    private boolean has_next;        
}
}

考虑文章篇幅,删除了XStreamTest类的set get方法,XStreamTest经toXml()转化后的结果是:


  test
  true
  
    1
    11
    false
  
  succ

有上述转化流程可知,java bean转化后的格式是固定的,当接口要求可变格式时,使用XStream方法是不可行的。下面讲讲使用freemarker模板渲染方式生成xml格式数据。

使用freemarker模板渲染方式生成xml文件数据

Spring MVC+freemarker框架,get请求完将数据put至ModelMap中,dispatchServlet使用freemarker模板引擎,会将ModelMap中数据渲染至.ftl文件中,生成页面。
使用此原理,直接调用freemarker模板引擎渲染方法,将数据渲染至.ftl文件,生成所需要的xml格式数据,然后执行ResponseWriter.write(xmlData, response);,返回xml格式数据xmlData。
渲染方法:

public String process(String templatefile, Map param)  {    
Template template = freeMarkerConfigurer.getConfiguration().getTemplate(templatefile);    
StringWriter sw = new StringWriter();    
template.process(param, sw);   
return sw.toString();
} 

templatefile是.ftl文件模板数据,param是要渲染至templatefile的数据。template.process(param, sw);是底层freemarker模板渲染执行方法,Spring MVC+freemarker框架也调用此方法,有兴趣的朋友具体可从DispatchServlet.doDispatch()进行源码跟踪,这里不再陈述。

xml文件解析成java bean

不多说废话,直接上代码,写的很清楚。

public static  T toBean(String xmlStr, Class clazz) {    
XStream xStream = new XStream(domDriver);    
xStream.processAnnotations(clazz);    
xStream.ignoreUnknownElements();    
T obj = (T) xStream.fromXML(xmlStr);    
return obj;}

本博客为博主原创,如需转载请说明出入xml格式接口数据编程实战,写作不易,如果本文对您有所帮忙,请点个赞,您的支持是我写作的最大动力。

你可能感兴趣的:(xml格式接口数据编程实战)