我遇到Jacksons JAXB支持的问题,它似乎没有在其他对象中编组对象?好的..让我用代码解释..
这是我的(简化的,不是getter / setters)代码:
@XmlRootElement( name = "identifiableObject" )
class IdentifiableObject {
@XmlAttribute
Integer id;
@XmlElement
String name;
}
@XmlRootElement( name = "a" )
class A extends IdentifiableObject {}
@XmlRootElement( name = "b" )
class B extends IdentifiableObject {
@XmlElement
@XmlJavaType( IdentifiableObjectXmlAdapter.class )
A a;
}
当我使用JAXB对其进行编组时,我没有任何麻烦,它可以正常工作。但是当我试图用杰克逊编辑它时,它似乎只是直接在对象上看到注释,所以它将它编组为:
{id:1,name:“name”,a:{}}
如果我将@JsonProperty添加到我的IdentifiableObject它工作正常,但我希望不这样做...如果我这样做,它似乎不再像@XmlJavaAdapter在属性上工作(不是很奇怪,因为我有JacksonAnnotationIntrospector首先在我的引导者对中)
无论如何..是否有可能:
(a)让Jacksons JAXB支持对对象进行深度编组吗? (如上所述,它适用于JacksonAnnotationIntrospector)
(b)是否有类似于我可以插入的XmlAdapter for Jackson?
更新: 为了澄清,我的预期输出是:
{
id: 1,
name: "b object",
a: {
id: 2,
name: "a object"
}
}
这是使用JAXB编组时的默认行为,但是在为JSON执行相同操作时则不行(通过JAXB注释内省运算符)
(a)我目前的解决方案是在任何地方添加@JsonProperty,这样就可以使用jackson注释内省运算器(因为在我的对中,它是主要的内部运算符),并且可行,但是我有每个吸气剂都有很多注释。
(b)我尝试在这里使用@JsonSerialize使用自定义JsonSerializer,但即使我在这里向下转换对象(IdentifiableObject)a;它仍然“看到”旧的版本,并将其上的所有内容编组。
- 的Morten