如何使用 Retrofit 将 XML 响应转换为数据类

问题描述 投票:0回答:1

我正在尝试连接到返回 XML 的 api。我正在尝试用

retrofit
来做到这一点。我创建了一个数据类结构来解析 XML,并且已经具有 XML 结构。我现在需要解析对 XML 的
retrofit
响应,我读到您必须使用
addConverterFactory
并在其上放置一个转换器。我读到
Jackson
可以解析 XML,并且
SimpleXML
已被弃用,所以我尝试使用
jackson
,如下所示:

Retrofit.Builder()
            .baseUrl("https://www.myapi.com/")
            .addConverterFactory(JacksonConverterFactory.create())
            .build().create(DataApiService::class.java)

问题是,当我执行我的应用程序时,出现此异常:

Exception in thread "AWT-EventQueue-0" com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')

所以看起来

Jackson
认为响应是json,但实际上是XML。我怎样才能正确地做到这一点?

Jackson
文档中找不到解决方案

android kotlin jackson retrofit retrofit2
1个回答
0
投票

解决了,关键是初始化Jackson转换器时使用

XmlMapper().registerKotlinModule()

implementation("com.squareup.retrofit2:retrofit:2.11.0")
            implementation("com.squareup.retrofit2:converter-jackson:2.11.0")
            implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.18.2")
            implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.0")


Retrofit.Builder()
            .baseUrl("https://www.website.com/")
            .addConverterFactory(JacksonConverterFactory.create(XmlMapper().registerKotlinModule()))
            .build().create(BusDataApiService::class.java)
© www.soinside.com 2019 - 2024. All rights reserved.