java - 映射到 "" 而不是 null Jackson
问题描述
我有一个函数可以将 Kafka 主题中的 XML 读取为字符串格式,然后我想将其转换为 JSON 对象。
示例 XML:
<Example>
<Object>
<Member1><![CDATA[]]</Member1>
<Member2><![CDATA[someText]]</Member2>
</Object>
</Example>
然后我有 POJO 类,例如:(使用 lombok getter/setter/toString 和 jackson 注释导入)
@Getter
@Setter
@ToString
@JacksonXMLRootElement(localName = "Example")
public class TXML {
@JacksonXmlProperty(localName = "Object")
private someObject object;
}
@Getter
@Setter
@ToString
public class someObject {
@JacksonXmlProperty(localName = "Member1")
private String member1;
@JacksomXmlProperty(localName = "Member2")
private String member2;
}
然后我使用 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 为空,而不是空字符串。我怎样才能做到这一点?
解决方案
您需要实现自己的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);
}
}
你需要指导Jackson
使用它:
@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;
}
推荐阅读
- google-analytics - 谷歌分析报告在设置推荐排除列表和过滤器后减少会话,增加平均会话持续时间
- javascript - 在 Safari 上播放音频时未处理的 Promise Rejection
- batch-file - 如何在 Intranet 上从 IIS 托管网站打开批处理文件
- dialogflow-es - 仅当实体的值匹配时才会触发 Dialogflow 意图
- postgresql - postgresql 中的只读管理员用户
- ubuntu - 成功添加 SSH 密钥后,Vscode 不断要求身份验证
- javascript - 如何在 Javascript 中更改 var 的颜色?
- python - 将特定列中的正数和 NaN 转换为 1,将负数转换为 0
- openedge - 在现有表的情况下如何有条件地编译?
- flutter - IntelliJ IDEA 中禁用了 Flutter Windows 选项