在处理天地图等返回 XML 数据的接口时,如何高效地将响应数据转换为 JavaBean 是常见痛点。UniHttp 作为高性能 HTTP 客户端库,提供了灵活的序列化扩展机制。本文将对比几种主流的实现路径,从原生 JAXB 到框架内置转换器,再到完全自定义方案,结合实际案例展示如何在保证代码优雅性的同时完成数据交互。
一、原生 JAXB 实现
JAXB(Java Architecture for XML Binding)是 Java 平台的一部分,提供了一种便捷的方式,用于在 Java 类和 XML 表示形式之间进行数据绑定。简单来说,JAXB 能够将 Java 对象转换为 XML 数据(序列化),也可以将 XML 数据转换为 Java 对象(反序列化)。
1. JAXB 特性
- 易用性:提供注解驱动的方式来定义映射关系。开发者只需要在 Java 类上添加
@XmlRootElement、@XmlElement等注解,即可指定属性如何映射到 XML 元素。 - 标准性:遵循 Java 社区规范,在不同开发环境中具有良好的兼容性。
- 性能:在序列化和反序列化过程中进行了优化,适合处理大量数据或对性能要求较高的场景。
2. 实现原理
(一)序列化(Java 对象到 XML)
- 创建 JAXBContext:这是 JAXB API 的入口点,负责管理映射信息。通过
JAXBContext.newInstance(MyClass.class)创建实例。 - 创建 Marshaller:通过
createMarshaller()方法获取。可设置Marshaller.JAXB_FORMATTED_OUTPUT为 true 以格式化输出。 - 执行序列化:调用
marshal()方法将对象写入OutputStream、Writer或File。
(二)反序列化(XML 到 Java 对象)
- 创建 JAXBContext:同上,指定目标 Java 类。
- 创建 Unmarshaller:通过
createUnmarshaller()方法获取。 - 执行反序列化:调用
unmarshal()方法从InputStream、Reader或File读取数据并转换为对象。
3. 常用注解简介
- @XmlRootElement:指定 Java 类作为 XML 文档的根元素。
- @XmlElement:指定属性或字段映射到 XML 元素。
- @XmlAttribute:将属性映射为 XML 元素的属性。
- @XmlAccessorType:指定访问策略,如
XmlAccessType.FIELD处理字段。
4. 编码实现
首先定义 UniHttp 接口,注意此时返回类型通常为 HttpResponse<String>,需要手动解析:
package com.yelang.project.thridinterface;
import com.burukeyou.uniapi.http.annotation.HttpApi;
import com.burukeyou.uniapi.http.annotation.param.QueryPar;
com.burukeyou.uniapi.http.annotation.request.GetHttpInterface;
com.burukeyou.uniapi.http.core.response.HttpResponse;
{
HttpResponse<String> ;
}


