我有一个简单的 XML,其中包含
<
字符的转义字符串作为 <
,然后我想通过使用 Jackson XML 反序列化将这些键值元素反序列化为包装器对象的 2.7.10
和
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.7</version>
</dependency>
但是,无论我尝试什么,Jackson 都会在反序列化的字符串值中自动将
<
转义为 <
。我怎样才能阻止这种行为?谢谢。
class WrapperClass {
private Map<String, String> globalMetadataAttributesMap;
}
// Register the custom deserializer
SimpleModule module1 = new SimpleModule();
module1.addDeserializer(RasdamanCoverageMetadata.class, new CustomDeserializer());
xmlMapper.registerModule(module1);
// Here it has two keys-values in the map
// which should be added as it-is to globalMetadataAttributesMap.
metadataStr = "<ras:covMetadata>\n" +
"<local_metadata_key>value_1</local_metadata_key>\n" +
"<X>3 < 7</X>\n" +
"</ras:covMetadata>";
xmlMapper.readValue(metadataStr, WrapperClass.class);
public static class CustomDeserializer extends JsonDeserializer<RasdamanCoverageMetadata> {
@Override
public WrapperClass deserialize(JsonParser p, DeserializationContext ctxt) {
JsonNode node = p.getCodec().readTree(p);
node.get("X") // prints 3 < 7. How to keep it as 3 < 7?
}
}
这个问题用 Jackson 是没有答案的,所以最后为了保持
3 < 7
的原样,我需要修改客户端来发布包裹在 <!CDATA[[3 < 7]]>
中的 XML,然后 Jackson 不会将其转换为 3 < 7
(这不是想要的行为)。