gpt4 book ai didi

java - 尝试反序列化 XML 时无法从 START_OBJECT token 中反序列化 java.lang.String 的实例

转载 作者:行者123 更新时间:2023-12-05 06:52:18 25 4
gpt4 key购买 nike

我正在尝试反序列化以 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 类:

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

public class Foo {

private String bar;

@JacksonXmlProperty(localName = "FieldExample")
private String fieldExample;

public String getBar() {
return bar;
}

public void setBar(String bar) {
this.bar = bar;
}

public String getFieldExample() {
return fieldExample;
}

public void setFieldExample(String fieldExample) {
this.fieldExample = fieldExample;
}
}

以下测试通过且没有您提到的任何错误:

import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class FooTest {
@Test
public void testDeserialize()throws Exception {
final String xml = "<root xmlns:xsi=\"http://foo.bar\">" +
"<bar>test</bar>" +
"<FieldExample xsi:type=\"xsd:string\"></FieldExample>" +
"</root>";
final Foo foo = new XmlMapper(new JacksonXmlModule())
.readValue(xml, Foo.class);
org.junit.Assert.assertEquals("test",foo.getBar());
org.junit.Assert.assertEquals("",foo.getFieldExample());
}
}

关于java - 尝试反序列化 XML 时无法从 START_OBJECT token 中反序列化 java.lang.String 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65994730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com