spring-boot - 为什么 OpenAPI 生成的 Spring 服务器无法解析带有兄弟元素的未包装 XML 数组?
问题描述
我在我的 Spring Boot 项目中使用 OpenAPI,并且我有以下部分规范供 OpenAPI 解析一些 XML 数据,包括一个未包装的数组,它是 element KYCInfo
:
CallbackRequestData:
type: object
xml:
namespace: '<some_namespace>'
properties:
TransID:
type: string
TransTime:
type: string
TransAmount:
type: number
format: double
...
KYCInfo:
type: array
xml:
wrapped: false
items:
type: object
required:
- KYCName
- KYCValue
properties:
KYCName:
type: string
KYCValue:
type: string
要解析的XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:C2BPaymentValidationRequest xmlns:ns1="http://cps.huawei.com/cpsinterface/c2bpayment">
<TransID>ABCDEFGIJKL</TransID>
<TransTime>20210926113918</TransTime>
...
<TransAmount>1.00</TransAmount>
<KYCInfo>
<KYCName>[Personal Details][First Name]</KYCName>
<KYCValue>John</KYCValue>
</KYCInfo>
<KYCInfo>
<KYCName>[Personal Details][Last Name]</KYCName>
<KYCValue>Doe</KYCValue>
</KYCInfo>
</ns1:C2BPaymentValidationRequest>
</soapenv:Body>
</soapenv:Envelope>
我已经使用openapi-generator-maven-plugin
v5.2.1 为 Spring Boot 生成了 API 接口。我的问题是,当我将上面的 XML 发送到上面生成的 API 时,出现以下错误,显示 XML 映射器无法将 XML 数组转换为 POJO:
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `CallbackRequestDataKYCInfo` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('[Personal Details][First Name]'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `CallbackRequestDataKYCInfo` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('[Personal Details][First Name]')
at [Source: (PushbackInputStream); line: 14, column: 44] (through reference chain: C2bValidationRequest["Body"]->C2bValidationRequestBody["C2BPaymentValidationRequest"]->C2BCallbackRequestData["KYCInfo"]->java.util.ArrayList[0])]
注意:完整的包名称已被删除。是否有任何原因它失败或我错过了什么?请注意,我无法控制 XML,正在使用远程 3rd-party API。
解决方案
推荐阅读
- apache-kafka - IIDR CDC for Kafka 是否需要 Confluent 平台?
- text - SwiftUI - VStack 使子文本跨全宽
- python - TFRecords 比原始大小大 100 倍
- java - java Stream以相反的顺序收集到TreeMap
- tensorflow - Tensorflow 2.0 中的梯度计算
- c# - 如何使用 IFixture.Build
() 当 T 是接口时使用 AutoMoqCustomization? - r - 无法编织降价,因为 plot.new 尚未被调用
- python - 散景服务器 - 运行应用程序处理程序时出错
- python - 如何在 sqlalchemy 中为我的主键列配置序列对象?
- eclipse-rcp - 如何在 RCP 应用程序启动后设置窗口标题