我正在尝试连接到返回 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
文档中找不到解决方案
解决了,关键是初始化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)