我正在使用 Jackson XML 注释将 XML 文档从外部 API 转换为 POJO。XML 中的一个元素给我带来了一些麻烦。大多数元素没有属性,只有一个文本值,例如:
<title>Title Here</title>
Run Code Online (Sandbox Code Playgroud)
不过,我在使用一个元素时遇到了一些问题,它有一个属性,如下所示:
<urgency id="UrgCaution">Caution</urgency>
Run Code Online (Sandbox Code Playgroud)
我只想提取文本值“注意”并将其存储在字符串中。我最初在我的 Java 类中尝试过这种方式:
public class Item {
@JacksonXmlProperty(localName = "urgency")
private String urgency;
}
Run Code Online (Sandbox Code Playgroud)
但这会导致以下错误:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct
instance of Item: no String-argument constructor/factory method to deserialize from
String value ('Security')
at [Source: java.io.ByteArrayInputStream@328ff654; line: 40, column: 21]
Run Code Online (Sandbox Code Playgroud)
“Security”是稍后出现在文档中的称为“tags”的 xml 属性的文本。
我尝试进行以下更改,这消除了异常,但导致我在 POJO 中获得了一个空值来表示紧急性。
public class Item {
@JacksonXmlProperty(localName = "urgency")
@JacksonXmlText
private String urgency;
}
Run Code Online (Sandbox Code Playgroud)
我觉得我在这里遗漏了一些明显的东西。使用 Jackson 将此元素的文本转换为 POJO 上的 String …