XML(可扩展标记语言)编码是将数据结构(如对象、数据记录等)转换为 XML 格式的过程。这个过程涉及到将数据按照 XML 的语法规则进行表示。例如,将一个包含用户信息(ID、姓名、年龄)的对象转换为 XML 文档,其中 ID、姓名、年龄等信息会被标记为 XML 元素。
XML 解码则是相反的过程,它将 XML 格式的数据转换回原始的数据结构。比如,将一个 XML 文档中的用户信息提取出来,重新构建成一个用户对象。
SaxDecoder 允许你以一种与普通 JVM 以及 Android 环境兼容的方式解码 XML。
以下是如何配置 Sax 响应解析的示例:
Api api = Feign.builder() .decoder(SAXDecoder.builder().registerContentHandler(UserIdHandler.class).build()) .target(Api.class, "https://apihost");
JAXB 是 Java EE(现在是 Jakarta EE)中的一个 API,它提供了一种方便的方式来将 Java 对象与 XML 进行相互转换。通过 JAXB,开发人员可以避免复杂的 XML 解析和生成代码,专注于业务逻辑。
其主要功能包括将 Java 对象编组(marshalling,即将 Java 对象转换为 XML)和将 XML 解组(unmarshalling,即将 XML 转换为 Java 对象)。
JAXBModule 允许你使用 JAXB 对 XML 进行编码和解码。
像这样将 JAXBEncoder 和/或 JAXBDecoder 添加到你的 Feign.Builder 中:
Api api = Feign.builder() .encoder(new JAXBEncoder()) .decoder(new JAXBDecoder()) .target(Api.class, "https://apihost");
JAXRSModule 会覆盖注解处理,改为使用 JAX-RS 规范提供的标准注解。目前针对的是 1.1 版本的规范。 下面是使用 JAX-RS 重写的上述示例:
interface GitHub { @GET @Path("/repos/{owner}/{repo}/contributors") List<Contributor> contributors(@PathParam("owner") String owner, @PathParam("repo") String repo); }