Java <;!CDATA[]]>;映射到"&引用;而不是空杰克逊

Java <;!CDATA[]]>;映射到"&引用;而不是空杰克逊,java,jackson,mapping,pojo,xml-to-json,Java,Jackson,Mapping,Pojo,Xml To Json,我有一个函数,可以将Kafka主题中的XML读入字符串格式,然后将其转换为JSON对象 XML示例: <Example> <Object> <Member1><![CDATA[]]</Member1> <Member2><![CDATA[someText]]</Member2> </Object> </Example> 然后,我使用MappingJackson2X

我有一个函数,可以将Kafka主题中的XML读入字符串格式,然后将其转换为JSON对象

XML示例:

<Example>
  <Object>
    <Member1><![CDATA[]]</Member1>
    <Member2><![CDATA[someText]]</Member2>
  </Object>
</Example>
然后,我使用MappingJackson2XmlHttpMessageConverter获取对象映射器,并使用该映射器将XML字符串映射到示例类

@Autowired ObjectMapper xmlMapper;
@Autowired
private MappingJackson2XmlHttpMessageConverter xmlConverter;
...
xmlMapper = xmlConverter.getObjectMapper();
Example example = xmlMapper.readValue(xmlString, Example.class);
这将生成一个具有以下内容的示例类:

Example
-> object
    -> member1 : ""
    -> member2 : "someText"

我希望member1为null,而不是空字符串。如何实现这一点?

您需要实现自己的
com.fasterxml.jackson.databind.util.Converter
,它将在反序列化后但在设置为所需格式之前转换您的值

实施示例:

class CDATAConverter implements Converter<String, String> {

    @Override
    public String convert(String value) {
        return (value == null || value.length() == 0) ? null : value;
    }

    @Override
    public JavaType getInputType(TypeFactory typeFactory) {
        return typeFactory.constructType(String.class);
    }

    @Override
    public JavaType getOutputType(TypeFactory typeFactory) {
        return typeFactory.constructType(String.class);
    }
}

您需要实现自己的
com.fasterxml.jackson.databind.util.Converter
,它将在反序列化之后但在设置为所需格式之前转换您的值

实施示例:

class CDATAConverter implements Converter<String, String> {

    @Override
    public String convert(String value) {
        return (value == null || value.length() == 0) ? null : value;
    }

    @Override
    public JavaType getInputType(TypeFactory typeFactory) {
        return typeFactory.constructType(String.class);
    }

    @Override
    public JavaType getOutputType(TypeFactory typeFactory) {
        return typeFactory.constructType(String.class);
    }
}

您是否尝试只提供member2而不提供member1?是否尝试只提供member2而不提供member1?
class CDATAConverter implements Converter<String, String> {

    @Override
    public String convert(String value) {
        return (value == null || value.length() == 0) ? null : value;
    }

    @Override
    public JavaType getInputType(TypeFactory typeFactory) {
        return typeFactory.constructType(String.class);
    }

    @Override
    public JavaType getOutputType(TypeFactory typeFactory) {
        return typeFactory.constructType(String.class);
    }
}
@Getter
@Setter
@ToString
class SomeObject {

    @JsonDeserialize(converter = CDATAConverter.class)
    @JacksonXmlProperty(localName = "Member1")
    private String member1;

    @JsonDeserialize(converter = CDATAConverter.class)
    @JacksonXmlProperty(localName = "Member2")
    private String member2;
}