【发布时间】:2021-02-01 14:47:05
【问题描述】:
我正在尝试反序列化以 XML soap 格式接收的消息。以前这一直有效,但由于源消息的更改,我现在遇到以下问题
Can not deserialize instance of java.lang.String out of START_OBJECT token
我可以看到这是因为消息中的以下内容....
<FieldExample xsi:type="xsd:string"></FieldExample>
我认为问题在于它试图将字符串数据类型分配或“强制转换”到一个空字段上,因此引发了一个错误,指出该字段是一个对象并且不能被识别为字符串。
我的问题是如何阻止反序列化器首先尝试读取这个特定的空字段。这就是我使用 Jackson 在我的 Java 代码中声明的方式
@JacksonXmlProperty(localName = "FieldExample", namespace = Namespace.example)
private String fieldExample;
我尝试了以下没有成功....
@JsonInclude(JsonInclude.Include.NON_EMPTY)
关于类定义
和
MAPPER.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
关于映射器的创建
不幸的是,问题仍然存在。
【问题讨论】:
-
检查Java bean 中是否有String 属性,以及XML 中是否有包含嵌套标签的对应标签,因为Jackson 将带有嵌套标签的标签视为对象,不能反序列化为纯字符串字段。
-
您能否使用
XML有效负载和POJO类创建一个简单的示例来重现此问题? -
请问,您能指出您使用的是什么版本的 Jackson 吗?
jackson-dataformat-xml项目中有一个reported bug,好像从2.7.0版本开始修复了。 -
看起来您正试图将 Object 数据类型映射到 String。共享示例负载
-
您能否向我们展示您尝试反序列化为对象的 XML 文件?也是您的 java 对象的精简版。
标签: java json xml jackson deserialization