杰克逊JAXB支持不会对象内部的对象?

时间:2011-11-21 12:27:27

标签: jaxb jackson

我遇到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

0 个答案:

没有答案