首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><!CDATA[[]]>映射到

<!CDATA[[]]>映射到
EN

Stack Overflow用户
提问于 2020-10-17 02:00:32
回答 1查看 101关注 0票数 1

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

示例XML:

代码语言:javascript
复制
<Example>
  <Object>
    <Member1><![CDATA[]]</Member1>
    <Member2><![CDATA[someText]]</Member2>
  </Object>
</Example>

然后我有了POJO类,比如:(使用lombok getter/setter/toString和jackson注解导入)

代码语言:javascript
复制
@Getter
@Setter
@ToString
@JacksonXMLRootElement(localName = "Example")
public class TXML {

  @JacksonXmlProperty(localName = "Object")
  private someObject object;
}
代码语言:javascript
复制
@Getter
@Setter
@ToString
public class someObject {

  @JacksonXmlProperty(localName = "Member1")
  private String member1;

  @JacksomXmlProperty(localName = "Member2")
  private String member2;
}

然后,我使用MappingJackson2XmlHttpMessageConverter获取对象映射器,并使用它将XML字符串映射到一个示例类。

代码语言:javascript
复制
@Autowired ObjectMapper xmlMapper;
@Autowired
private MappingJackson2XmlHttpMessageConverter xmlConverter;
...
xmlMapper = xmlConverter.getObjectMapper();
Example example = xmlMapper.readValue(xmlString, Example.class);

这将产生一个具有以下内容的示例Class:

代码语言:javascript
复制
Example
-> object
    -> member1 : ""
    -> member2 : "someText"

我希望member1为空,而不是空字符串。我如何才能做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-17 06:59:56

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

示例实现:

代码语言:javascript
复制
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);
    }
}

您需要指示Jackson使用它:

代码语言:javascript
复制
@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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64394193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档