我使用Jackson来支持Jackson和JAXB注释,并将对象序列化为XML。
r$run(host="127.0.0.1", port=8000, swagger=TRUE)
或者,我尝试将XmlMapper xmlMapper = new XmlMapper();
xmlMapper.registerModule(new JacksonXmlModule());
xmlMapper.registerModule(new JaxbAnnotationModule());
xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
配置为相同的结果。
AnnotationIntrospector
但是,使用JAXB XmlEmelemt的必需属性注释的POJO字段会被忽略,因为JsonInclude.Include.NON_NULL序列化策略会覆盖该标志(忽略null元素并且空标记为没有添加)。
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setAnnotationIntrospector(
new AnnotationIntrospectorPair(new XmlJaxbAnnotationIntrospector(), new JacksonAnnotationIntrospector()));
xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
有没有办法保留这个策略,但尊重JAXB的必需标志,并在每次没有值时写一个空元素?
答案 0 :(得分:0)
事实证明required
仅在解组时使用,上述行为为by specification。
无论如何,对我有用的是:
选项1
再添加一个自定义JsonSerializer
。
对于特定的必需元素(它是另一个元素的组成部分,比如ObjectType
),我只需将值设置为空字符串null
并将其写出来:
public void serialize(ObjectType obj, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
gen.writeStartObject();
// write other elements
String someValue = obj.getSomeValue();
if (someValue == null) {
someValue = "";
}
gen.writeStringField("some-value", someValue);
gen.writeEndObject();
}
选项2
fasterxml
工作人员在讨论https://github.com/FasterXML/jackson-module-jaxb-annotations/issues/68#issuecomment-355055658
是
子类
JaxbAnnotationIntrospector
,覆盖方法findPropertyInclusion()