Java - Jackson - 如何不逃脱 < to < character automatically when deserializing?

问题描述 投票:0回答:1

我有一个简单的 XML,其中包含

<
字符的转义字符串作为
&lt;
,然后我想通过使用 Jackson XML 反序列化将这些键值元素反序列化为包装器对象的 映射。我有 Spring Boot 版本的 Jackson
2.7.10

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.8.7</version>
        </dependency>

但是,无论我尝试什么,Jackson 都会在反序列化的字符串值中自动将

&lt;
转义为
<
。我怎样才能阻止这种行为?谢谢。

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 &lt; 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 &lt; 7?
            
        }
        
}
java xml spring-boot serialization jackson
1个回答
0
投票

这个问题用 Jackson 是没有答案的,所以最后为了保持

3 &lt; 7
的原样,我需要修改客户端来发布包裹在
<!CDATA[[3 &lt; 7]]>
中的 XML,然后 Jackson 不会将其转换为
3 < 7 
(这不是想要的行为)。

© www.soinside.com 2019 - 2024. All rights reserved.